我有一个简单的Core Data实体,它有一个名为“description”的字符串属性。 程序崩溃时程序崩溃:
valueForKey:@"description"
我将“description”属性更改为“text”并解决了问题。
为什么会这样?
“描述”是核心数据中的保留关键字吗?
是否与从NSObject调用description方法有关?
是否存在对这些保留关键词的引用?
答案 0 :(得分:25)
因为它与-description
中的NSObject
方法冲突(回想一下Core Data动态生成属性访问器和mutators) - 名为'description'的属性需要创建一个名为-description
的访问器方法)。这在Core Data Programming Guide和NSPropertyDescription Class Reference:
请注意,属性名称不能与NSObject或NSManagedObject的任何无参数方法名称相同。例如,您不能为属性指定名称“description”。 NSObject上有数百个可能与属性名称冲突的方法 - 这个列表可以在没有框架或其他库的警告的情况下增长。您应该避免使用非常一般的单词(如“font”和“color”)以及与Cocoa范例重叠的单词或短语(例如“isEditing”和“objectSpecifier”)。
答案 1 :(得分:4)
description不是CoreData中的保留关键字,但它本身就是所有Objective-C对象的属性。它是NSObject类的一部分。
答案 2 :(得分:0)
我怀疑(虽然我不肯定)问题是Core Data的运行时访问器生成问题。 Core Data在运行时为属性合成访问器(和setter),并将这些访问器添加到适当的类中(同样,在运行时)。如果Core Data创建了一个新的description
方法,覆盖-[NSObject description]
并将事务逻辑等放入方法中,则任何调用-[NSObject description]
的代码都可能表现得很糟糕。