Xcode 4.5 все еще, кажется, ожидает @synthesize - иначе не может получить доступ к свойству
Я использую Xcode 4.5 на новой установке Mountain Lion. Компилятор LLVM4.1, и мой проект использует ARC. (В прошлом я баловался с Xcode, но некоторое время не трогал).
Мой вопрос:
Я понимаю, что в более новых версиях Xcode больше нет необходимости включать директиву @synthesize (и, конечно же, когда я перетаскиваю ctrl из компонента пользовательского интерфейса в.xib в файл.h, директивы не создаются в файл.m), но без них я не могу получить доступ к этим свойствам и вместо этого получаю ошибку "Неизвестный получатель ххх".
Простой пример:
Я создал проект Single View для iPhone с меткой ("myLabel") и кнопкой ("myButton"). Я перетащил ctrl из UILabel в ViewController.xib в ViewController.h, чтобы создать следующее свойство:
@property (strong, nonatomic) IBOutlet UILabel *myLabel;
и я создал действие кнопки, перетаскивая тоже.
В файле.m я написал следующий код в методе myButton:
- (IBAction)myButton:(id)sender {
NSLog(@"The label text is %@", [myLabel text]);
}
Результат:
Это дает мне ошибку времени компиляции ("Неизвестный получатель myLabel").
Я все еще могу получить доступ к своему свойству, используя подчеркивание (то есть [_myLabel text]) или добавив "@synthesize myLabel;" вверху файла.m вручную, но я подумал, что мне не нужно делать это или что это должно быть сделано для меня. Может кто-нибудь объяснить, что я делаю неправильно в коде (или, возможно, это связано с некоторыми настройками, которые мне нужно настроить?)
Спасибо
PS Я отмечаю, что мой файл.m теперь также имеет свой собственный блок @interface вверху (предположительно, для объявления приватных переменных?)
1 ответ
Автоматические ивары имеют префикс подчеркивания, чтобы отличать их от имен свойств. Так что вам нужно будет использовать _myLabel
, Если вам не нравится префикс по умолчанию, вы можете изменить имя ivar для свойства, используя @synthesize