【发布时间】:2011-03-02 20:52:57
【问题描述】:
我正在运行一个使用 coredata 更新表的更新线程。 其中一条记录称为上次更新。但是当更新完成后,我在主线程中检索上次更新的值时,我得到了一个过时的值。
我愿意:
[NSFetchedResultsController deleteCacheWithName:nil];
在再次查询设置之前,我应该/可以做些什么来提醒主线程它应该再次检查物理表?
【问题讨论】:
-
您的更新线程是否对您的提取线程使用单独的托管对象上下文?
-
按照建议这样做,这是唯一的线程保存方式。我可以重新编写整个应用程序以在主线程上执行核心数据调用,但这有点使设计不合逻辑。一定有办法???
-
您不需要重写或重构应用程序 - 但您需要在工作线程和主线程中拥有 NSManagedObjectContexts,它们都指向同一个 NSPersistentStoreCoordinator。查看 Marcus Zarra 的核心数据一书 - 特别是第 9 章(多线程和核心数据) - 了解有关跨线程通信的详细信息(他的意思是让工作线程通知主线程更改)。
-
@Westsider--您应该将评论移至答案。
-
谢谢,听起来不错,我会去看看这本书!谢谢!
标签: iphone cocoa-touch core-data nsfetchedresultscontroller