自动@property合成不适用于NSManagedObject子类

时间:2012-09-20 10:34:57

标签: xcode properties ios6 synthesize

昨晚更新到适用于iOS6的Xcode 4.5的最新版本后,我收到类似的警告和错误

  

属性'mapAnnotation'需要定义方法'mapAnnotation'    - 使用@synthesize,@ dynamic或在此类实现中提供方法实现

因为缺少@synthesize语句,甚至是关于未知iVars的错误,如果我使用它们。

事情是,我认为没有必要写这些@synthesize语句自从Mountain Lion发布的最后一个Xcode Update 4.5以来,并且在我昨晚更新Xcode之前我的所有项目都没有它们(i那时我从我的文件中删除了一大堆@synthesize语句 它甚至还在发行说明中:

  

•使用属性时,默认情况下会生成Objective-C @synthesize命令。

所以我很困惑,我错过了一个新的项目设置,它会自动生成@synthesize生成?

但是当我创建一个新项目并尝试它时,它甚至都没有工作

1 个答案:

答案 0 :(得分:35)

我遇到了同样的问题,找到了原因和解决方案。

如果查看iOS 6 SDK中NSManagedObject的头文件,您将看到“NS_REQUIRES_PROPERTY_DEFINITIONS”,它强制类为属性指定@dynamic或@synthesize。

(您可以在iOS 5.1和iOS 6.0之间的API差异中看到NS_REQUIRES_PROPERTY_DEFINITIONS。)

这是因为编译器必须知道您是希望属性是动态的还是合成的,尤其是在NSManagedObject类的子类的实现中。

我只需在NSManagedObject子类中为@dynamic以外的属性显式添加@synthesize行就可以解决这个问题。