【发布时间】:2025-12-13 15:10:01
【问题描述】:
我有两个Realm 模型类
class ModelA: Object {
let id = RealmOptional<Int>()
dynamic var name: String!
// some other variables that are also String! type
}
class ModelB: Object {
let id = RealmOptional<Int>()
let models = List<ModelA>()
// other variables
}
我有一些 JSON 对象,其中包含该模型的数据。我创建ModelB 实例,然后用ModelA 实例列表填充它,方法如下:
let json: JSON = ... // get it from somewhere, then use SwiftyJSON
let myModelB = ModelB()
myModelB.id.value = json["id"].object as? Int
// set other properties
let modelsA = json["models"].map { ModelA(value: $0.1.object) }
myModelB.models.appendContentsOf(modelsA)
我在这里使用不同方法的原因是JSON 中的属性名称与ModelB 的属性名称不匹配,但ModelA 可以。
稍后我使用realm.add(objects, update: true)(在realm.write 内),这会导致以下异常:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类与键的键值编码不兼容(null)。”
如果您的模型类包含主键,您可以使用 Realm().add(_:update:) 让 Realm 根据主键值智能更新或添加对象。
所以ModelA 和ModelB 都有primaryKey() 功能,我相信它应该可以工作,但事实并非如此。
此外,我在调用中删除了update 参数,并在添加新对象之前添加了对realm.deleteAll() 的调用(都在write 回调中)。在这种情况下,我得到以下异常:
由于未捕获的异常“RLMException”而终止应用程序,原因:“无法将主键属性“id”设置为现有值“xxxxxxx”。
此外,如果我尝试通过调用堆栈,Xcode 会崩溃。如果我尝试检查调试器中的任何 Realm 对象,它也会崩溃。我已经安装了Realm Xcode 插件,但没有任何变化。我无法理解这里出了什么问题以及为什么我会出现如此奇怪的行为。有人可以告诉我我的错误在哪里吗?
【问题讨论】:
-
您能否展示您用于创建要添加的领域对象的代码以及模型A 本身?看起来那里可能有问题。
-
@BabyAzerty 当然,编辑了我的问题。谢谢!