【问题标题】:Core Data not firing fault when accessing relationship property?访问关系属性时核心数据没有触发错误?
【发布时间】:2013-11-01 00:03:04
【问题描述】:

当我访问实体关系中的属性时,我无法弄清楚为什么 Core Data 没有触发错误?

我感觉原因可能是因为我将 NSManagedObjects 子类化的方式是这样的:

NSManagedObject
     |      
MYManagedObject (NSNumber *id)
     |
MYSimpleManagedObject (NSString *name)
     |
Employee
      \
       Manager

NSManagedObject
     |
MYManagedObject (NSNumber *id)
     |
MYSimpleManagedObject (NSString *name)
     |
  Manager
        \ 
      Employee

在上面的场景中,Employee 和 Manager 都是其他几个类的子类,它们本身不是我的数据模型中的实体,而是我用来封装代码 属性的常规类,例如id 和 name 是许多实体共有的。这个模型对我来说效果很好,但是我的问题是以下语句会引发错误manager.employee.name

但是,如果我改为使用[manager valueForKeyPath:@"employee.name"],则会触发故障,我会得到我需要的值。

我是否需要重写任何访问器方法或其他东西才能使值触发错误?

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    在模型编辑器中,您可以指定某些实体具有父实体。我建议在 Core Data 中对两个父实体进行建模并指定父子关系。

    根据我的经验,您的访问器应该会按预期工作。

    【讨论】:

    • 感谢回复,但是根据我对this 帖子的理解,实体层次结构与类层次结构部分,如果我遵循您建议的模型,那么所有子类属性都将存储在一个公用表中?如果我有许多子类,每个子类都有大数据集,那么这会将所有数据存储在一个表中。
    • 如果您认为性能会受到影响,只需在实体类ManagerEmployee 中对idname 两个属性进行建模。但除非你真的遇到性能问题,否则我不会这样做。
    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多