核心数据关系错误:null键

时间:2012-11-04 00:50:58

标签: objective-c core-data relationship osx-mountain-lion xcode4.5

我有一个名为Person的实体,可能有一个家,以及一个名为Home的实体,可能有一个到N个家庭:

enter image description here

然后我有两个阵列控制器:

  1. Homes Controller,以实体模式绑定到托管对象上下文:Home;
  2. People Controller,与实体模式中的托管对象上下文绑定:person。
  3. 我有一个基于单元格的表视图,与People Controller绑定。我能够成功显示前三列(姓名,姓氏和年龄),但问题在于第4列:主页的名称。在内部列中有一个弹出按钮单元格,这些是绑定:

    • 内容:Homes Controller.arrangedObjects;
    • 内容值:Homes Controller.arrangedObjects.name;
    • 所选对象:People Controller.home。

    问题来自运行时,当我尝试单击弹出按钮选择主页时:

    enter image description here

    就像你看到的那样,而不是选择我看到“核心数据关系错误”,如果我尝试通过点击菜单项来改变主页,我看到很多代码打印到控制台,我发布的最多重要的一句话:

    2012-11-04 01:47:45.181 Test[4390:303] [<NSManagedObject 0x100156e60> valueForUndefinedKey:]: the entity Home is not key value coding-compliant for the key "(null)".
    

    此后应用程序冻结。

    编辑:通过一些调试,我现在能够在异常发生时知道对象的状态:

    2012-11-09 02:42:02.495 Test[4650:303] <NSManagedObject: 0x100157460> (entity: Person; id: 0x10013d9d0 <x-coredata:///Person/t0182F6F4-9CCC-4F51-A82F-D00CE026DB752> ; data: {
        age = 20;
        home = "0x101953480 <x-coredata:///Home/t0182F6F4-9CCC-4F51-A82F-D00CE026DB753>";
        name = "New Name";
        surname = "New Surname";
    })
    2012-11-09 02:42:02.497 Test[4650:303] <NSManagedObject: 0x101953420> (entity: Home; id: 0x101953480 <x-coredata:///Home/t0182F6F4-9CCC-4F51-A82F-D00CE026DB753> ; data: {
        name = "New Home";
        people =     (
            "0x10013d9d0 <x-coredata:///Person/t0182F6F4-9CCC-4F51-A82F-D00CE026DB752>"
        );
    

    似乎值是常规的,没有nil键。我怀疑问题在于绑定。

2 个答案:

答案 0 :(得分:5)

如果不了解如何从Core Data获取对象及其关系,很难说出实际情况。

但是,仅仅因为你看到“错误”这个词实际上并不意味着存在问题。核心数据错误只是意味着数据尚未从商店检索到托管对象上下文中。

故障非常方便。它们就像是存在于关系中的对象的小存根,因此您不会过多地记忆。只有当您尝试访问它们被替换为实际对象的对象时。

请参阅Core Data Relationship Fault了解更多信息。

答案 1 :(得分:1)

Home-people和Person-home需要使用模型构建器声明为彼此的反向关系才能正常运行。然后,这种关系将显示为一行。