2014-09-04 4 views
0

У меня возникли проблемы с пониманием того, как перезаписать метод readonly методом readwrite, написанным в расширении класса. У меня есть метод readonly в моем файле заголовка, и в моем файле реализации я пытаюсь перезаписать его, используя расширение класса. Я только что спросил об этом в этой теме, где я включаю код, который я имею в виду: Having trouble with class extension in Objective C, mac OS. Getting error 'NSInvalidArgumentException', no visible @interface declares the selectorObjective C class extensions - как перезаписать readonly с помощью метода readwrite?

Здесь: Objective-C Succinctly: Categories and Extensions - это еще один источник, который я использую, что заставляет меня полагать, что я могу перезаписать объявленное свойство readonly в моем файле заголовка со свойством readwrite с расширением класса. Пожалуйста, поправьте меня, если я ошибаюсь, я полный новичок, просто пытающийся выяснить основы.

+0

Эт, что такое «метод readwrite»? –

+0

Извините, что я имел в виду свойство, значение readwrite имеет значение getter и setter по умолчанию. – mepstein1218

ответ

0

Фокус в том, что вы не перезаписываете. Вы переопределяете. Вы пишете метод только для чтения, который добавляет любую необходимую вам обработку, затем либо вызывает супер, либо возвращает результат или предоставляет настраиваемый результат. (Ссылка на ваш собственный ivar или свойство или предоставление рассчитанного результата)

Хорошо, так что после ваших изменений.

Методы немного отличаются. Вы говорите о свойствах. Свойство в Objective-C в основном объявляет переменную ivar или экземпляра, которая будет (обычно) иметь стандартные методы setter и getter. Те устанавливают или получают значение ivar.

Если у вас есть свойство только для чтения в вашем заголовке или унаследовано от суперкласса (что делает его эффективным в вашем заголовке), то да, это обычная практика, чтобы переопределить свойство как чтение записи в файле .m или реализации , Вы добавляете раздел расширения класса. Расширение класса - это в основном неназванная категория в классе.

Пример.

In .h 

@interface Cat : NSObject <> 
@property (readonly) NSInteger countOfCatTails; 
@end 

In .m 
@interface Cat() 
@property NSInteger countOfCatTails; 
@end 
+0

Извините, мне трудно понять, что вы говорите, я не привык к большому языку жаргонов. Что вы подразумеваете под «добавлением каких-либо манипуляций»? Также, когда вы говорите «возвращает этот результат», в каком результате вы ссылаетесь? И наконец, что вы имеете в виду с круглыми скобками? – mepstein1218

+0

Это буквально то, что у меня есть, но я получаю сообщение об ошибке: «Нет видимого @interface для« XYZPerson »объявляет селектор« setHeight ». ' – mepstein1218

+0

На этом этапе вам необходимо опубликовать свой код. – uchuugaka