【发布时间】:2023-03-10 07:59:02
【问题描述】:
我收到RLMException 的原因如下:
尝试使用现有的对象创建“学生”类型的对象 主键值'258975085-504336622-62850'。
令人困惑的部分是它发生在检查 Realm 中没有具有此键的现有对象之后。
let realm = try Realm()
if let info = realm.object(ofType: Student.self, forPrimaryKey: newStudent.userId) {
try realm.write {
info.name = newStudent.name
info.school = newStudent.school
info.email = newStudent.email
}
}
else {
try realm.write {
realm.add(newStudent) //RLMException occurs here
}
}
这段代码都在 GCD 实用程序队列上异步运行,在 do/catch 块内。它由用户界面中的按钮触发,但没有其他任何东西同时访问领域。
为什么那个 if 语句可以让 else 代码运行?
【问题讨论】:
-
您为什么不将 userId 写入领域以获取新对象?
-
我的 userId 是 Student 对象的一部分,所以如果它可以找到一个具有匹配 id 的对象,那么它不需要再次写入 id,如果我正在创建一个它,它就会包含在模型中新对象。
-
您是否尝试打印 newStudent.userId 的值?是“258975085-504336622-62850”吗?
-
是的,就是这样。我对为什么在开始时对该 id 的对象调用不会返回它感到更加困惑