2013-02-19 41 views
10

我正在将代码从非ARC转换为ARC,并删除了一些不必要的@synthesize调用。 一个具体的类开始发出警告,一些属性:属性需要定义方法

Class.h

@property (strong, nonatomic) NSString *xyz; 

但是建立的时候,我得到的警告。

Property 'xyz' requires method 'xyz'to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation 

我认为使用Xcode 4.6和默认Apple LLVM编译器4.2应该自动合成@properties。

如何告诉编译器自动合成属性? 我是否必须使用特定的项目配置来删除此警告?

+0

你已经有了'setXyz:'方法吗? – rmaddy 2013-02-19 17:55:34

回答

35

此属性是否为NSManagedObject的子类? NSManagedObject严禁自动合成,因为大多数声明的属性预计为@dynamic

这是通过在@interface NSManagedObject之前放置的NS_REQUIRES_PROPERTY_DEFINITIONS宏实现的,其扩展到__attribute__((objc_requires_property_definitions))。这也可以用于其他类,但NSManagedObject是我所知道的唯一的框架类。

+0

事实确实如此!这是问题,我不知道这个特殊性与'NSManagedObject'类。 – 2013-02-19 18:05:27