【问题标题】:realm-cocoa save an empty object rather than object I passedrealm-cocoa 保存一个空对象而不是我传递的对象
【发布时间】:2018-09-25 02:41:08
【问题描述】:

我在 realm-cocoa 2.8.0 中遇到了一个问题(在 2.7.0 中效果很好),当我想将一个对象保存到领域文件中时,我看到一个具有默认值的空对象被保存到领域中而不是我创建的对象(即使主键不同。) 例如。

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) 执行之后,在领域文件中,我只能看到一个对象

{
    id: 169e6bc2-9b34-44ae-8ac3-70e6b9145adc,
    name: ""
}

而且 id 也与我在断点看到的不同。看起来 Realm 创建了一个对象,而不是使用我传入的对象。我在这里寻求帮助。

那么什么会导致领域创建一个空对象(可能是默认值?)而不是保存我传递的对象。我只是想在这里了解一些可能的原因。

【问题讨论】:

    标签: ios mobile realm realm-database


    【解决方案1】:

    我想我明白了,在我的项目中,我们有一个 NSObject 类别,其中包括一个名为 objectForKey 的方法,在 Realm 的 src 中,当我们从 RLMObject 读取值时,我们检查它是否可以响应 objectForKey,通常它应该return false 并继续执行以下代码以获取真实值,但在我的项目中,代码将返回 nil,因为它不是字典。

    所以会关闭这个

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多