царство какао сохранить пустой объект, а не объект, который я передал - PullRequest
0 голосов
/ 25 сентября 2018

Я столкнулся с проблемой в 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: ""
}

, а идентификатор также отличается от того, что я видел в точке останова.Похоже, что Realm создает объект, а не использует объект, который я передал. Я прошу некоторую помощь здесь.

Итак, что заставит область создать пустой объект (может быть значение по умолчанию?), А не сохранить объект, который япрошло.Я просто хочу привести некоторые возможные причины здесь.

1 Ответ

0 голосов
/ 25 сентября 2018

Я думаю, я понял, что в моем проекте есть категория для NSObject, которая включает метод с именем objectForKey, а в src Realm, когда мы читаем значение из RLMObject, мы проверяем, может ли он ответить на objectForKey, обычно это должно произойтиверните false и продолжайте выполнять следующий код, чтобы получить реальное значение, но в моем проекте код вернет nil, потому что это не словарь.

Так что закроем это

...