Почему компилятор не видит @synthesize и @dynamic? - PullRequest
0 голосов
/ 05 августа 2011

Это НЕ новый код. Он был скомпилирован и успешно выполнен тысячи раз ДО ОС 10.7 Lion / LLVM / Clang.

@interface CapDuring : NSObject {
    const char * iFileName;
...
}
@property(assign) const char * iFileName;
...
@property(readonly,getter=iFileName) const char * fileName;

! Свойство 'fileName' требует определения метода 'iFileName' - используйте @synthesize, @dynamic или предоставьте реализацию метода

...
@end


@implementation CapDuring
@synthesize iFileName;
...
@end

Это предупреждение повторяется для каждого подобного объявления (даже если используется @dynamic).

Ответы [ 4 ]

3 голосов
/ 05 августа 2011

Ваша строка здесь @synthesize iFileName. Это неверно Вы хотите @synthesize fileName. Вы синтезируете свойство, а не метод. Сам метод генерируется как часть процесса синтеза методов доступа к свойствам.

2 голосов
/ 05 августа 2011
@property(readonly,getter=iFileName) const char * fileName;
@synthesize iFileName;

означает, что есть свойство с именем filename, которое получает свой геттер с именем "iFileName".

и для этого свойства действительно нет синтеза

Полагаю, вам нужно определить имя получателя iFileName как "fileName", то есть:

@property(readonly,getter=fileName) const char * iFileName;
@synthesize iFileName;

, что делает метод получения с именем fileName для свойства iFileName при синтезе

1 голос
/ 19 декабря 2011

Использование @property (...) ... iInstanceVariable а потом @property (..., getter = iInstance) ... instanceReference в отдельный @interface (категория) начал доставлять мне проблемы.

Лучшее решение:

@ property (...) ... instanceReference; @synthesize instanceReference = iInstanceVariable;

Это работает в обязательном порядке в отдельной категории или нет.

0 голосов
/ 08 августа 2011

Я обошел эту ошибку, переместив любые свойства, использующие геттеры, которые также являются свойствами, в отдельный @interface MyClass (myCompile).

Эта же проблема возникает, когда свойство / метод ОС переименовывается черезgetter / setter.

Я справился с этим, исключив переименование методов ОС.

Спасибо за все ваши предложения.

...