为什么我不能使用“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类的一部分。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/description

我怀疑(虽然我不是积极的),这个问题是核心数据的运行时访问代的问题。 Core Data在运行时为属性合成访问器(和设置器),并将这些访问器添加到适当的类(在运行时再次)。 如果核心数据创build一个新的description方法,覆盖-[NSObject description]并把事务逻辑等放到方法中,那么任何调用-[NSObject description]代码都可能performance得“不好”。