分配对象的领域错误

时间:2017-04-10 21:02:51

标签: swift realm

我在iOS项目中使用Realm和Swift。

我有一个Realm对象,它反过来包含对其他Realm对象的引用。我注意到一些奇怪的行为,设置引用将导致主键错误,如下所示:

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

奇怪的是,我只是设置参考。我有两个对象(ObjectA和ObjectB),每个对象都有自己的主键。

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

当我第一次使用该objectReference时,它可以正常工作。只是当我使用相同的objectReference进行后续更新时,它似乎出错了。

如果我第一次调用将对象添加到Realm并使用update:true就可以了,但是感觉很糟糕。也许这是正确的方法?或者也许我错过了Realm的观点。是否将对象分配给另一个隐式尝试将对象添加到Realm?

谢谢

1 个答案:

答案 0 :(得分:0)

这取决于您使用哪个API写入Realm。使用realm.add(_:update:)并将update设置为false将始终尝试将该对象添加为该对象和任何子对象的新副本。如果您有主键,它将触发您在上面看到的异常。如果您没有主键,它将添加该对象的整个第二个副本(您可能不需要它)。

realm.add(_:update: true)主要用于REST API模式,您可能会不断从服务器更新对象,Realm可以在第一次智能地将对象添加到数据库,然后只需更新该对象在随后的电话中。

如果两个对象都已在Realm中,并且您知道不需要该添加或更新逻辑,则直接分配子对象而不是使用add API可能更合适:< / p>

let realm = try! Realm()

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

try! realm.write {
   parentObject.objectReference = childObject
}