我在一个将coredata与服务器请求相结合的应用程序中重写了一大段代码。我正在尝试找出最佳方法,以便在新服务器请求返回新JSON时我可以同时更新对象。顺便说一句,如果iOS7使解决方案更好,请随意假设代码只需要与iOS7兼容。
这是一个基本用例:
假设我的User
实体具有id
和name
属性以及2个M2M(用户/用户)关系:friends.
和呃... {{1 }}?肯定。
因此应用程序启动。内存中的图形和SQL持久性存储都没有。我要求检索id为15的用户及其朋友和恶魔。
接下来会发生什么:
fiends
类型的谓词对User
进行抓取。id = 15
(这将获取用户属性,/users/15
和{{1} }), B: id
(关系)和 C: name
(关系)。这3个请求是并发的。users/15/friends
属性。从上面看,每次JSON从服务器返回时,我都会创建或更新相应的托管对象并保存。问题是,对于此示例,相同的上下文将获得3个可能并发的调用:创建用户15和/或填充其users/15/fiends
,创建用户15和/或填充其id
,创建用户15和/或更新其名称和ID。
我最初的计划是:
但是现在我只是读一下friends
和fiends
的两个队列并发类型以及子上下文的概念,我还没有完全理解它。所以我想知道,我的原始计划是否可行?
我能想到的几个问题是:
NSManagedObjectContext
? -performBlock:
的单个上下文而不是通过GCD进行调度,只需执行NSPrivateQueueConcurrencyType
?