2017-01-20 13 views
0

はのは、私は次のような構造を持つデータベースを持っていると仮定しましょうレルムcreateOrUpdate複雑なオブジェクト

User* user = ... // Get unmanaged User, 
       // parsed from API 
       // with unmanaged parsed nested mathces and round 

RLMRealm* realm = [RLMRealm defaultRealm]; 
[realm beginWriteTransaction]; 
[realm addOrUpdateObject: user]; 
[realm commitWriteTransaction]; 

質問:Realmはすべてのネストされたオブジェクトとメインオブジェクトを更新しますか? P .:私は[Round nextMoveUser]を更新する際にいくつかの問題に直面しているので、これを尋ねています。更新後はゼロになります。デバッガでは、解析されたエンティティですべてが正しいことが示されていますが。

また、このような種類の参照については、内部的にはどのように動作するのか説明できるかどうかわかりません。

答えて

1

RLMObjectを更新するときは、管理対象外のコピーを使用して更新する場合は注意が必要です。 nilは有効な値であるため、コピーに元の情報と同じ情報がすべて含まれていない場合は、元の値が削除されます。

これはRLMArrayオブジェクトにも適用されます。空の配列も有効な値としてカウントされるためです。配列と内容が有効であることを確認する必要があります。

これを扱いやすくする簡単な方法の1つは、アンマネージコピーの代わりにNSDictionaryを使用してRealmオブジェクトを更新することです。このようにして、どのプロパティが更新され、どのプロパティが単独で残されるかを明示的に指定することができます。

私は物事が内部的にどのように機能するかについて質問に答える方法は正確にはわかりません。しかし、子オブジェクトは親オブジェクトによって直接所有されているわけではありません。さらに、両方のオブジェクトが存在し、互いに独立して動作しますが、親オブジェクトは子オブジェクトを指すリンクリストの関係を維持します。その関係が削除されたとしても、オブジェクトはデータベース内に残ります。

関連する問題