我有两种情况。一个是在后台做一些工作,然后保存它。另一个上下文位于主线程中,用于更新UI。我有一个NSFetchedResultsController(NSFRC)从主上下文中获取并具有缓存。当我在后台上下文中保存时,我合并到主上下文中。 NSFRC更新表视图。奇怪的是,当我重新启动我的应用程序并且NSFRC执行其提取时,我得到了崩溃,因为缓存的对象与提取的对象不匹配。为什么我的缓存更新没有,但表格视图是?
为了完整性:我没有以任何方式更改NSFetchRequest。
答案 0 :(得分:0)
当FRC观察到保存完成通知时,将写入高速缓存。当后台上下文保存时,将在更改合并到视图上下文之前发送此通知,从而导致FRC更新,这意味着在合并更改之前缓存已按顺序保存,并且已经过期。要使缓存包含最新的订单,您需要执行另一次保存。
请注意,由于这个原因,只有在不使用WAL模式(现在是默认设置)时才正确地将FRC缓存检测为过期,因此,在使用后台上下文时最好不要使用该缓存。 http://openradar.appspot.com/17396603