我收到一个RLMException原因如下:
尝试使用现有的主键值“258975085-504336622-62850”创建类型为“Student”的对象。
令人困惑的部分是,它是在检查 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
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在 GCD 实用程序队列上异步运行,位于 do/catch 块内。它由用户界面中的按钮触发,但同时没有其他任何东西访问领域。
为什么那个 if 语句允许 else 代码运行?
回答我自己的问题,因为我发现了问题。
我认为问题是之前的应用程序屏幕试图将(相同的)学生对象保存在具有实用服务质量的队列中,这意味着它在调用 后realm.object(...)但在调用 之前完成保存realm.add(...)。
将 if 语句移至领域写入事务内也有帮助(感谢 EpicPandaForce)。
| 归档时间: |
|
| 查看次数: |
5232 次 |
| 最近记录: |