2017-03-01 23 views
0

私は、オブジェクトの配列を保持する領域オブジェクトを持っています。独立したレルムオブジェクトの作成方法

RLM_ARRAY_TYPE(ContactObject) 
@interface PersonObject : RLMObject 
@property RLMArray< ContactObject *><ContactObject> *contactArray; 
@end 

私がPersonObjectを開始し、contactArrayにデータを追加した後、別の一時的人物オブジェクトを作成しようとしています。

PersonObject *tempPersonObj = [[PersonObject alloc]init]; 

この一時オブジェクトにold personObjectを割り当てます。

ここで、tempPersonOBjの連絡先配列オブジェクトを削除すると、oldPersonObjの連絡先配列オブジェクトも削除されます。

どうしてですか?データベースに影響を与えずに一時オブジェクトにデータをコピーする方法はありますか?

答えて

1

tempPersonObj = oldPersonObjを割り当てると、古い人物オブジェクトのコピーは作成されません。代わりに、同じ基本オブジェクトに2つの参照があるので、一方を変更すると他方も変更されます。より一般的には、Realmによって提供されるすべてのタイプは、実際には基礎となるデータベースとオブジェクトへの参照にすぎません。

一時オブジェクトが必要な場合は、新しいオブジェクトを(実行中に)作成し、プロパティを個別にコピーする必要があります。リストの場合は、元のオブジェクトのlistプロパティからRLMObjectをコピーし、それらを新しいオブジェクトのlistプロパティに追加する必要があります。

+0

個々のアイテムをコピーしても、元のオブジェクトが変更されたときにコピーされたオブジェクトが変更されます。すべてのレルムオブジェクトが接続されています。 –

関連する問題