したがって、2 つの NSManagedObjectContext オブジェクトがあります。親コンテキストと子コンテキスト。いくつかの NSManagedObjectModels があり、そのうち 5 つのうち 4 つを作成/編集/破棄できます。問題ない。子コンテキストにオブジェクトを挿入して保存すると、ルートコンテキストにポップアップ表示されます。
しかし、私に問題を引き起こしているのは 5 分の 1 です。問題なく挿入できます。ルート コンテキストに表示されます。オブジェクトの属性を変更しようとすると、ルート コンテキストで更新されません。コンソールからの出力を次に示します (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 とブール値として保存しています。