2017-04-10 4 views
0

iOSプロジェクトでRealm with Swiftを使用しています。オブジェクトの割り当て時にレルムエラーが発生する

私は他のレルムオブジェクトへの参照を含むレルムオブジェクトを持っています。私は次のように参照を設定すると、主キーエラーが発生しますいくつかの奇妙な行動に気づいた:奇妙な何

Terminating app due to uncaught exception 'RLMException', 
reason: 'Can't create object with existing primary key value '35834'.' 

は、私はちょうど参照を設定してるということです。私は2つのオブジェクト(ObjectAとObjectB)を持っていますが、各オブジェクトはそれ自身の主キーです。

public class ObjectA: Object{ 
    dynamic public var objectReference:ObjectB? 

初めてこのオブジェクト参照を使用した場合、正常に動作します。それは間違っているように見える同じobjectReferenceで後続の更新を行うときだけです。

オブジェクトをRealmに追加するための呼び出しを最初に行った場合、trueのものは正常ですが、それはハッキリです。多分それは行くべき正しい方法でしょうか?あるいは、私はレルムとのポイントを逃したかもしれません。別のオブジェクトにオブジェクトを割り当てると、そのオブジェクトをレルムに暗黙的に追加しようとしますか?

ありがとうございます。

答えて

0

レルムに書き込むために使用しているAPIによって異なります。 realm.add(_:update:)updateをfalseに設定すると、常にそのオブジェクトとその子オブジェクトの新しいコピーとしてそのオブジェクトを追加しようとします。主キーがある場合は、上記の例外が発生します。プライマリキーを持っていない場合は、そのオブジェクトの2番目のコピー全体が追加されます(どちらも必要ではありません)。

realm.add(_:update: true)のポイントは、主にサーバからオブジェクトを常に更新するREST APIパターン用であり、Realmは最初にオブジェクトをデータベースにインテリジェントに追加してから、その後の呼び出しでそのオブジェクトを更新することができます。

let realm = try! Realm() 

let parentObject: ObjectA = ... 
let childObject: ObjectB = ... 

try! realm.write { 
    parentObject.objectReference = childObject 
} 
:両方のオブジェクトがレルムに既にある、とあなたが直接 add APIを使用するのではなく、子オブジェクトを割り当てるには、それがより適切かもしれないというアドオンまたは更新ロジックを必要としないわかっている場合

+1

お返事ありがとうございます。問題は、ObjectBを割り当てる前にRealBに格納していたことが問題だったことが判明しました。割り当てが行われたのは初めてでしたが、オブジェクトが割り当てられたときはいつでも例外がスローされていました。方法で意味をなさない – James

関連する問題