【问题标题】:Why can't I use "description" as an attribute name for a Core Data entity?为什么我不能使用“描述”作为核心数据实体的属性名称?
【发布时间】:2011-01-17 20:25:54
【问题描述】:

我有一个简单的核心数据实体,它有一个名为“description”的字符串属性。 程序在命中时崩溃:

valueForKey:@"description"

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

为什么会这样?

“描述”是 Core Data 中的保留关键字吗?

和调用NSObject的描述方法有关系吗?

如果存在这些保留关键字,是否有参考?

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    因为它与NSObject 中的-description 方法冲突(回想一下,Core Data 动态生成属性访问器和修改器——名为“description”的属性需要创建一个名为-description 的访问器方法)。这在Core Data Programming GuideNSPropertyDescription Class Reference 中有记录:

    请注意,属性名不能与 NSObject 或 NSManagedObject 的任何无参数方法名相同。例如,您不能为属性命名为“description”。 NSObject 上有数百个方法可能与属性名称冲突——而且这个列表可能会在没有来自框架或其他库的警告的情况下增长。您应该避免使用非常笼统的词(例如“字体”和“颜色”)以及与 Cocoa 范例重叠的词或短语(例如“isEditing”和“objectSpecifier”)。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 它本身不是一个(声明的)属性,而是一个方法名。
      • 问题是为什么 Core Data 不喜欢托管对象上的键 @"description"。 NOT:什么是“描述”方法?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-02
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多