0

所以我有两个 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 和布尔值。

4

2 回答 2

0

看起来您的value属性以某种方式未正确定义。这是一个检查清单:

  1. 您已经检查了数据模型中的数据类型
  2. 您还应该检查NSManagedObject正确类型的子类。
  3. 另外,再次检查您如何设置新值。
于 2013-01-15T11:16:46.197 回答
0

嗯....关于 CoreData 的知识还有很多。

基本上我遇到的问题是:

  1. 创建一个 NSManagedObject,但不插入到上下文中。
  2. 更新新创建对象的属性。
  3. 将对象插入到上下文中。

但是,如果我颠倒第 1 步和第 2 步,而是先将对象插入上下文,然后更新属性,它就可以正常工作。

于 2013-01-19T00:10:49.730 回答