他のレルムオブジェクトを指すプロパティを持つレルムオブジェクトのクラス名を変更できません。たとえば、このようなクラスです。レルムの移行 - クラス名の変更(複合クラスの場合)
class OldClass: Object {
var id: String!
var dog: Dog! //this is a Realm Object (with its own table)
}
私はこれを行う方法の簡単な例を見てきました。
migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in
migration.create("NewClass", value: oldObject!)
})
私はOldClassとNewClassの両方のためのスキーマが同じであった場合は、すべてのプロパティが非レルムのオブジェクトであれば上記は働くだろう期待しています。スキーマが違うなら、私はあなたがこれのようなことをすることができることを集めました。
migration.enumerateObjects(ofType: "OldClass", { (oldObject, newObject) in
let obj = migration.create("NewClass")
obj["id"] = (oldObject["id"] as! String)
obj["newPropertyName"] = (oldObject!["oldPropertyName"] as! Int)
})
これらの例では、オブジェクトに別のレルムオブジェクトを指すプロパティがある場合は動作しません。少なくとも、これは私がRLMException '既存のプライマリキー値を持つオブジェクトを作成できません。'が表示されるため、私が疑うところです。
「既存の主キー」がDogオブジェクトを参照していて、NewClassからOldClassに移行すると、移行が既に存在するDogオブジェクトを再作成しようとしているという疑いがあります。
このタイプの移行を正しく実行するにはどうすればよいですか?