【发布时间】:2013-10-15 11:29:30
【问题描述】:
场景:
我在 IOS 上使用配置为针对 SQLite 数据库操作的 Magical 记录。默认情况下,MR 配置 coredata 将所有写回主线程上的父上下文序列化。
我使用的模式是,当我不在主线程上时,我使用诸如 MagicalRecord:MR_saveWithBlockAndWait 之类的东西为 coredata 操作创建一个单独的 NSManagedObjectContext。神奇的记录创建上下文,将其连接到父上下文,执行您在回调块中指定的任何操作并最终保存。重要的是,保存应该在操作完成之前提交。
当我完成后台线程的工作时,我通常会通知 UI 发生了一些事情;例如:某些内容已下载/上传/更改。
然后,在 UI 线程上,我使用主线程上的默认上下文创建一个新的 fetch 请求。问题是偶尔 coredata 找不到我之前提交的新对象。问题体现在微妙的竞争条件下,如果 UI 线程由于动画或其他一切正常运行而稍微慢一些 - 但有时它找不到新对象。
从我读过的内容来看,获取请求总是应该进入磁盘。 MOC 上还有一个过时属性,但听起来这仅与缓存有关,如果您执行 fetch 请求,则会被绕过。
有没有人遇到过类似的问题并有什么见解?谢谢。
【问题讨论】:
标签: ios core-data magicalrecord