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

Другие вопросы по тегам