在我的项目中,我正在使用coredata。其中一个实体有一个名为 newTotal 的属性,在其对应的NSManagedObject类中,属性声明就像
@property (nonatomic, strong) NSString *newTotal;
如果我在NSObject子类中添加这样的属性,XCode将显示错误,如
error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
但是在NSManaged对象子类中,它没有显示错误,但是当访问该属性时应用程序崩溃,类似 EXC_BAD_ACCESS 。
为什么XCode没有显示错误但应用程序崩溃了?这是XCode / clang / LLVM的错误吗?
我知道它与合成相关的东西。 NSManagedObject子类没有合成其中的属性,但@dynamic指令只是告诉编译器getter和setter方法不是由类本身实现,而是由其他地方实现(如超类或将在运行时提供)。但我对此并不清楚。任何人都可以对问题给出清晰的认识吗?
答案 0 :(得分:5)
我可以看到你正在使用ARC。
在ARC内存中为您管理,但您自己可以/不得不做的事情很少。您不能将属性命名为“newXxxx”,因为:
您无法为访问者提供以new开头的名称。这反过来意味着你不能,例如,声明一个名称以new开头的属性,除非你指定一个不同的getter:
//无效:
@property NSString *newTitle;
//工作:
@property (getter=theNewTitle) NSString *newTitle;