gpt4 book ai didi

swift - 分配对象时出现 Realm 错误

转载 作者:行者123 更新时间:2023-11-30 12:32:28 25 4
gpt4 key购买 nike

我在我的 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 进行后续更新时,它似乎出错了。

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

谢谢

最佳答案

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

realm.add(_:update: true) 的要点主要针对 REST API 模式,您可能会不断从服务器更新对象,Realm 可以智能地将对象添加到第一次访问数据库,然后在后续调用中简单地更新该对象。

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

let realm = try! Realm()

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

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

关于swift - 分配对象时出现 Realm 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com