所以我有两个 NSManagedObjectContext 对象。一个父上下文和一个子上下文。我有几个 NSManagedObjectModels,我可以创建/编辑/销毁其中 5 个中的 4 个。没问题。我可以在子上下文中插入对象,然后保存它,瞧,它会在根上下文中弹出。
然而,给我带来麻烦的是五分之一。我可以毫无问题地插入它,它会显示在根上下文中。当我尝试更改对象的属性时,尽管它没有在根上下文中更新。这是来自控制台的打印输出(注意 value 属性没有得到更新)。
====root_context:("<Token: 0x1006f6a30> (
entity: Token;
id: 0x107115130 <x-coredata:///Token/t2AC116F0-E89B-485D-B0A9-C3D2A58B84847> ;
data: { association = 0;
equation = \"0x107114b10 <x-coredata:///Equation/t2AC116F0-E89B-485D-B0A9-C3D2A58B84846>\";
isValid = 0;
precedence = 0;
type = 0;
value = nil;})")
====child_context:("<Token: 0x1071150a0> (
entity: Token;
id: 0x107115130 <x-coredata:///Token/t2AC116F0-E89B-485D-B0A9-C3D2A58B84847> ;
data: { association = 0;
equation = \"0x107114b10 <x-coredata:///Equation/t2AC116F0-E89B-485D-B0A9-C3D2A58B84846>\";
isValid = 0;
precedence = 0;
type = 0;
value = 4;})"
)
从我的新手眼中,这些似乎是同一个对象。即使我打印出这两个对象的 objectID(即使它们在不同的上下文中),它们的 objectID 也匹配。
更多背景信息
要合并,我正在调用[_childContext save:&error]
它将更改推送到父上下文。每次检测到子上下文中的更改时都会调用此代码。然后,一旦我在我调用的子上下文中观察到 NSManagedObjectContextDidSaveNotification[_rootContext mergeChangesFromContextDidSaveNotification:notification]
附加说明
我不知道这是否是另一个线索,但是当我将数据保存到 XML 文件时,它会忽略该value
属性。这是输出:
<object type="TOKEN" id="z104">
<attribute name="type" type="int16">0</attribute>
<attribute name="precedence" type="int16">0</attribute>
<attribute name="isvalid" type="bool">0</attribute>
<attribute name="association" type="int16">0</attribute>
<relationship name="equation" type="1/1" destination="EQUATION" idrefs="z106"></relationship>
</object>
谢谢大家!
ps 我检查了我的 .xcdatamodeld 文件,一切似乎都井井有条。我将值存储为字符串,其余的存储为整数 16 和布尔值。