2

这是我在stackoverflow中的第一篇文章。因为我遇到了即使在google和文档中查找也无法解决的问题。

我有一个小的 iOS 项目,它是一个天气搜索应用程序。基本上总体上很容易实现,但是我必须遵循一些规则:

链接到持久存储(在磁盘上)的后台线程上的一个父上下文;UI 主线程上的一个子上下文;后台线程上的一个子上下文,用于与 Web 服务对话。

看到这个后,我在网上找到了一张图片: 在此处输入图像描述

此图像显示了该项目究竟应该做什么。我现在遇到的问题很少。

  1. 如图所示,我使用[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]定义我的主 UI MOC,并使用 NSPrivateQueueConcurrencyType 定义我的 webMOC 和 diskMOC。问题是,我应该将所有内容都放入 [UIMOC performBlock: ^{......}] 吗?

  2. 我现在很困惑,UI不是在主线程上运行吗?那么 NSMainQueueConcurrencyType 的意义何在?

  3. 看了很多文档,发现childMOC和parentMOC之间共享数据的方式要么是让childMOC运行“保存”功能,要么是通过通知调用merge函数。(a) 对于第一个,我需要先 [childMOC save] 然后再做 [parentMOC save] 吗?还是在 [childMOC save] 之后,parentMOC 会自动更新?(b) 我不确定哪种方式更合适。

  4. 上图有 3 个级别的 MOC。如果我在最低级别的 MOC 上执行“保存”功能,最高级别的 MOC 可以共享数据吗?

  5. 正如我所想,为什么不能将最低级别的MOC与最高级别的MOC结合起来进行读写?同时,中间的UIMOC,是不是必须放到Context的performBlock函数中才能运行NSFetchedResultController?

4

0 回答 0