>我在 realm-cocoa 2.8.0 中遇到了一个问题(在 2.7.0 中效果很好(,那就是当我想将对象保存到 realm 文件中时,我看到一个具有默认值的空对象被保存到领域而不是我创建的对象中(甚至主键也不同。 例如。
class XXXRealmObject: RLMObject {
@objc dynamic var id: String = UUID().uuidString.lowercased()
@objc dynamic var name: String = ""
@objc init(name: String) {
self.name = name
super.init()
}
@objc override init() {
super.init()
}
override class func primaryKey() -> String {
return "id"
}
}
let obj = XXXRealmObject(name: "jojo")
let realm = try! RLMRealm(configuration: .default())
try? realm.transaction {
*breakpoint*
realm.addOrUpdate(object)
}
我在realm.addOrUpdate(object(之前添加一个并打印对象,它显示正确的对象,但是在realm.addOrUpdate(object(被执行之后,在realm文件中,我只能看到一个对象
{
id: 169e6bc2-9b34-44ae-8ac3-70e6b9145adc,
name: ""
}
并且 id 也与我在断点中看到的不同。看起来 Realm 会创建一个对象,而不是使用我传入的对象。我在这里寻求一些帮助。
那么什么会导致 realm 创建一个空对象(也许是默认值?(而不是保存我传递的对象。我只是想在这里得到一些可能的原因。
我想我明白了,在我的项目中,我们有一个名为 objectForKey 的 NSObject 类别,在 Realm 的 src 中,当我们从 RLMObject 读取值时,我们检查它是否可以响应 objectForKey,通常它应该返回 false 并继续执行以下代码以获得真正的值,但在我的项目中, 代码将返回 nil,因为它不是字典。
所以会关闭这个