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

MeX*_*eXx 25 xcode properties synthesize ios6

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

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

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

问题是,我认为没有必要写这些@synthesize语句自从Mountain Lion发布的最后一个Xcode Update 4.5以来,并且在我昨晚更新Xcode之前我的所有项目都没有它们(我删除了)从我的文件回来的一大堆@synthesize语句然后它甚至还在Release-Notes中:

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

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

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

Tak*_*aka 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行就可以解决这个问题.

  • 我收到了苹果开发支持的答案,它基本上就是你所说的:"DNAnnotation是NSManagedObject的后代,它对属性的自动合成施加了限制.NSManagedObject要求在它的子类中定义的所有属性都由显式合成程序员.你需要为mapAnnotation属性添加一个合适的(at)合成或(at)动态语句." (3认同)