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

===============>>#1 票数:0

看来您的value属性未正确定义。 以下是检查清单:

  1. 您已经检查了数据模型中的数据类型
  2. 您还应该检查NSManagedObject子类的正确类型。
  3. 另外,再次检查如何设置新值。

===============>>#2 票数:0 已采纳

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

基本上我遇到的问题是:

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

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

  ask by schmudu translate from so

未解决问题?本站智能推荐: