为什么我不能将“description”用作Core Data实体的属性名称?

时间:2011-01-17 20:25:55

标签: ios core-data

我有一个简单的Core Data实体,它有一个名为“description”的字符串属性。 程序崩溃时程序崩溃:

valueForKey:@"description"

我将“description”属性更改为“text”并解决了问题。

为什么会这样?

“描述”是核心数据中的保留关键字吗?

是否与从NSObject调用description方法有关?

是否存在对这些保留关键词的引用?

3 个答案:

答案 0 :(得分:25)

因为它与-description中的NSObject方法冲突(回想一下Core Data动态生成属性访问器和mutators) - 名为'description'的属性需要创建一个名为-description的访问器方法)。这在Core Data Programming GuideNSPropertyDescription Class Reference

中有记录
  

请注意,属性名称不能与NSObject或NSManagedObject的任何无参数方法名称相同。例如,您不能为属性指定名称“description”。 NSObject上有数百个可能与属性名称冲突的方法 - 这个列表可以在没有框架或其他库的警告的情况下增长。您应该避免使用非常一般的单词(如“font”和“color”)以及与Cocoa范例重叠的单词或短语(例如“isEditing”和“objectSpecifier”)。

答案 1 :(得分:4)

description不是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

答案 2 :(得分:0)

我怀疑(虽然我不肯定)问题是Core Data的运行时访问器生成问题。 Core Data在运行时为属性合成访问器(和setter),并将这些访问器添加到适当的类中(同样,在运行时)。如果Core Data创建了一个新的description方法,覆盖-[NSObject description]并将事务逻辑等放入方法中,则任何调用-[NSObject description]的代码都可能表现得很糟糕。