这是我在stackoverflow中的第一篇文章。因为我遇到了一个问题,即使在Google和文档中查找也无法解决。
我得到一个小型iOS项目,这是一个天气搜索应用程序。基本上它很容易实现整体,但我必须遵循一些规则:
后台线程上的一个父上下文,它链接到持久存储(在磁盘上); 用户界面主线程上的一个子上下文; 用于与Web服务通信的后台线程上的一个子上下文。
看到这个后,我在网上找到了一个图片:
此图显示了该项目究竟应该做些什么。我现在遇到的问题很少。
如图所示,我使用[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]
来定义我的主UI MOC,并使用NSPrivateQueueConcurrencyType来定义我的webMOC和diskMOC。问题是,我应该将所有内容都放入[UIMOC performBlock:^ {......}]吗?
我现在很困惑,是不是在主线程上运行UI?那么NSMainQueueConcurrencyType有什么意义呢?
在阅读了大量文档之后,我发现在childMOC和parentMOC之间共享数据的方法是使childMOC运行“save”函数,或者通过通知调用merge函数。 (a)对于第一个,我需要[childMOC save]然后做[parentMOC save]吗?或者[childMOC save]之后,parentMOC会自动更新? (b)我不确定哪种方式更合适。
上图中有3级MOC。如果我在最低级别MOC“保存”功能并且最高级别MOC可以共享数据吗?
正如我所想的那样,为什么最低级别的MOC不能与最高级别的MOC结合并进行读写?同时,在中间的UIMOC,我是否必须将它放入Context的performBlock函数来运行NSFetchedResultController?