0

したがって、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 とブール値として保存しています。

4

2 に答える 2

0

うーん....CoreData について学ぶことはまだたくさんあります。

基本的に、私が遭遇した問題は、次のことでした。

  1. NSManagedObject を作成しますが、コンテキストに挿入しません。
  2. 新しく作成されたオブジェクトの属性を更新しています。
  3. オブジェクトをコンテキストに挿入します。

ただし、手順 1 と 2 を逆にして、オブジェクトを最初にコンテキストに挿入してから属性を更新すると、問題なく動作します。

于 2013-01-19T00:10:49.730 に答える
0

value属性が正しく定義されていないようです。チェックリストは次のとおりです。

  1. データ モデルのデータ型は既にチェック済みです
  2. NSManagedObjectまた、適切なタイプのサブクラスを確認する必要があります。
  3. また、新しい値の設定方法をもう一度確認してください。
于 2013-01-15T11:16:46.197 に答える