MagicalRecord:后台保存
Posted
技术标签:
【中文标题】MagicalRecord:后台保存【英文标题】:MagicalRecord:Background saving 【发布时间】:2014-05-19 03:39:58 【问题描述】:对于使用 MagicalRecord 与支持核心数据的 sqlite 数据库进行通信的 ios 应用程序,通过 Web 服务调用保存大型 json 数据的方法应该是什么?
由于 MagicalRecord (MR) 有一个名为“rootContext”的 NSManagedObjectContext,其 NSPrivateQueueConcurrencyType 并发类型与持久存储关联作为最顶层上下文。然后是另一个名为“defaultContext”的 NSManagedObjectContext,其类型为 NSMainQueueConcurrencyType [似乎用于处理主线程上的核心数据]。这个“默认上下文”有一个父 NSManagedObjectContext 作为“根上下文”。
我的问题是,对于需要持久化到 sqlite 的 json 数据 [包括多个核心数据实体] 的大型后台运行下载,我们应该使用 NSPrivateQueueConcurrencyType 创建单个上下文,其父级是 rootContext 还是多个上下文?
应该使用什么方法,有什么想法吗?
【问题讨论】:
【参考方案1】:这取决于数据的真实情况 - 即数据之间是否存在关系,这决定了数据的多个部分是否可以同时加载。您只需要一个上下文和一个后台线程,但如果数据允许并且可以提高性能(您需要对其进行测试和分析),您可以使用更多。拥有大量上下文不太可能有太大帮助(或者实际上只会让事情变慢)。
【讨论】:
RestKit 可以帮助你,它会用你的一些配置数据来管理导入和线程。 是的,底层的 sqlite 数据库确实有关系,并且要解析以存储在 sqlite 中的数据也以关系形式出现。即使我使用一个线程和一个上下文,问题仍然是这个上下文的父级是什么?它是 MagicalRecord 中的 rootContext 还是默认上下文? 通常是根上下文。以上是关于MagicalRecord:后台保存的主要内容,如果未能解决你的问题,请参考以下文章
正确设置 MagicalRecord 以在后台线程上保存 rootSavingContext
如何确保在使用 MagicalRecord 3.0 保存后台线程后通知 NSFetchedResultsController