2013-02-19 38 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