为什么我不能使用“description”作为Core Data实体的属性名称?
我有一个简单的Core Data实体,它有一个名为“description”的string属性。 程序碰撞时崩溃:
valueForKey:@"description"
我把“描述”属性改为“文本”,问题就解决了。
为什么会这样呢?
“描述”是核心数据中的保留关键词吗?
它与从NSObject调用描述方法有关吗?
如果这些保留关键字存在,是否有引用?
因为它与NSObject
的-description
方法冲突(回想一下,Core Datadynamic生成属性访问器和增变器 – 名为'description'的属性将需要创build一个名为-description
的访问器方法。 这在“ 核心数据编程指南”和“ NSPropertyDescription类参考”中进行了说明 :
请注意,属性名称不能与NSObject或NSManagedObject的任何非参数方法名称相同。 例如,你不能给一个属性名称“描述”。 NSObject上有数百个方法可能与属性名称冲突,而且这个列表可以在没有来自框架或其他库的警告的情况下增长。 你应该避免使用与cocoa范例(例如“isEditing”和“objectSpecifier”)重叠的非常普通的单词(如“font”和“color”)以及单词或短语。
描述不是CoreData中的保留关键字,但是它本质上是所有Objective-C对象的属性。 它是NSObject类的一部分。
我怀疑(虽然我不是积极的),这个问题是核心数据的运行时访问代的问题。 Core Data在运行时为属性合成访问器(和设置器),并将这些访问器添加到适当的类(在运行时再次)。 如果核心数据创build一个新的description
方法,覆盖-[NSObject description]
并把事务逻辑等放到方法中,那么任何调用-[NSObject description]
代码都可能performance得“不好”。