我有一个名为Person的实体,可能有一个家,而一个名为Home的实体,可能有一个到N个家:
然后我有两个数组控制器:
Homes Controller,在实体模式下与受管理对象上下文绑定。
人员控制器,在实体模式下与受管理对象上下文绑定:人员。
我有一个基于单元格的表格视图,与People Controller绑定在一起,我能够成功显示前三列(名称,姓氏和年龄),但问题出在第四列:房屋名称。弹出按钮单元格,这些是绑定:
内容:Homes Controller.arrangedObjects;
内容值:Homes Controller.arrangedObjects.name;
所选对象:People Controller.home。
问题出在运行时,当我尝试单击弹出按钮选择主页时:
就像您看到的一样,我看到的是“核心数据关系故障”,而不是选择,并且如果我尝试通过单击菜单项来更改主页,则会看到很多代码被打印到控制台上,我只发布了最重要的一行:
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键。我怀疑问题出在绑定上。
最佳答案
在不了解您如何从核心数据中获取对象及其关系的情况下,很难说出实际情况。
但是,仅仅因为您看到“故障”一词实际上并不意味着存在问题。核心数据故障仅表示尚未从存储中将数据检索到托管对象上下文中。
故障非常方便。它们就像是在关系中代表对象的小桩,这样您就不会过多地占用内存。仅当您尝试访问对象时,它们才被替换为实际对象。
有关更多说明,请参见Core Data Relationship Fault。