我有两个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.write
中的realm.add(objects, update: true)
,这会导致以下异常:
根据文档:Terminating app due to uncaught exception 'NSUnknownKeyException',reason: '[valueForUndefinedKey:]:此类未针对键(null)进行键值编码。'
因此,如果您的模型类包括主键,则可以使用Realm().add(_:update:)根据其主键值智能更新或添加对象。
ModelA
和ModelB
都有primaryKey()
函数,我相信应该可以工作,但事实并非如此。此外,我删除了调用中的
update
参数,并在添加新对象之前添加了对realm.deleteAll()
的调用(在write
回调中)。在这种情况下,我会收到以下异常:
另外,如果我尝试浏览调用堆栈,Xcode会崩溃。如果我尝试在调试器中检查任何Terminating app due to uncaught exception 'RLMException', reason: '无法将主键属性'id'设置为现有值'xxxxxxx'。
Realm
对象,它也会崩溃。我已经安装了Realm
Xcode插件,但没有任何变化。我无法理解出了什么问题,为什么会出现如此奇怪的行为。请问有人能告诉我我的错误在哪里吗?