这不是新代码。它在OS 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)。
答案 0 :(得分:3)
这里的行是@synthesize iFileName
。那是不对的。你想要@synthesize fileName
。你正在合成属性,而不是方法。该方法本身是作为合成属性访问器的过程的一部分生成的。
答案 1 :(得分:2)
@property(readonly,getter=iFileName) const char * fileName;
@synthesize iFileName;
表示有一个名为filename的属性,它将其getter命名为“iFileName”。
并且该属性确实没有合成
我想你想要做的是将iFileName的getter名称定义为“fileName”,即:
@property(readonly,getter=fileName) const char * iFileName;
@synthesize iFileName;
通过合成
为属性iFileName创建一个名为fileName的getter答案 2 :(得分:1)
使用 @property(...)... iInstanceVariable 然后 @property(...,getter = iInstance)... instanceReference 进入一个单独的@interface(类别)开始给我带来问题。
最佳解决方案是:
@property(...)... instanceReference; @synthesize instanceReference = iInstanceVariable;
这不会在单独的类别中有效。
答案 3 :(得分:0)
通过将任何使用getter属性的属性移动到单独的@interface MyClass(myCompile)中,我解决了这个错误。
当通过getter / setter重命名OS属性/方法时,会出现同样的问题。
我通过取消重命名OS方法来解决这个问题。
感谢您提出的所有建议。