所以我有两个NSManagedObjectContext对象。父上下文和子上下文。我有几个NSManagedObjectModels,我能够创建/编辑/破坏其中的5个。没问题。我可以在子上下文中插入对象然后保存它,并在根上下文中弹出 voila 。
然而,这是给我带来麻烦的五分之一。我可以毫无问题地插入它,它将显示在根上下文中。当我尝试更改对象的属性时,虽然它没有在根上下文中更新。这是来自控制台的打印输出(请注意,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>
谢谢大家!
P.S。我检查了我的.xcdatamodeld文件,一切似乎都是有序的。我将值存储为String,其余的存储为Integer 16和Booleans。
答案 0 :(得分:0)
看起来您的value
属性在某种程度上未正确定义。这是一个清单:
NSManagedObject
子类的正确类型。答案 1 :(得分:0)
嗯......还有很多东西可以学习CoreData。
基本上我遇到的问题是我是:
但是,如果我反向步骤1和2,而是首先将对象插入上下文,然后更新属性,它就可以正常工作。