一、NSManagedObjectContext创建和获取
1.默认上下文(每种只存在一个)
(1)MR_rootSavingContext:此方法返回的上下文类型为NSPrivateQueueConcurrencyType(后台线程),直接关联持久化协调器,对此上下文对象执行保存方法,会将所有关联到此上下文的子上下文内容保存的数据库文件。
(2)MR_defaultContext:此方法返回的上下文类型为NSMainQueueConcurrencyType(主线程),此上下文会关联到MR_rootSavingContext,作为MR_rootSavingContext的子上下文。当此上下文会回调主线程时,请不要调用此上下文去保存数据。
(3)MR_resetDefaultContext:重置MR_defaultContext。
2.创建上下文
(1)MR_context:此方法创建一个NSPrivateQueueConcurrencyType类型的上下文,作为MR_rootSavingContext的子上下文。
(2)MR_contextWithParent:此方法创建一个NSPrivateQueueConcurrencyType类型的上下文,父上下文自己指定。没有指定持久化协调器。
(3)MR_contextWithStoreCoordinator:此方法创建一个NSPrivateQueueConcurrencyType类型的上下文,自己指定持久化协调器。此上下文默认没有父上下文。
(4)MR_newMainQueueContext:此方法创建一个NSMainQueueConcurrencyType类型的上下文,默认没有父上下文,没有指定持久化协调器。
(5)MR_newPrivateQueueContext:此方法创建一个NSPrivateQueueConcurrencyType类型的上下文,默认没有父上下文,没有指定持久化协调器。
3.调试工具方法
(1)MR_setWorkingName:设置上下文别名,用于调试。
(2)MR_workingName:访问上下文别名。
(3)MR_description:此上下文描述。
(4)MR_parentChain:此上下文的所有父上文描述。
二、NSManagedObjectContext保存方法汇总:
1.MR_saveOnlySelfWithCompletion:在此上下文对应队列中异步执行保存方法。此方法只保存当前上下文以及其父上下文,如果此上下文以及其父上下文没有关联持久化协调器,则数据更改不会同步到数据库文件。block是在主线程回调的。
2.MR_saveToPersistentStoreWithCompletion:在此上下文对应队列中异步执行保存方法。此方法会一直追溯到其所有上级上下文,最后将数据更改保存到数据库文件。block是在主线程回调的。
3.MR_saveOnlySelfAndWait:类似于MR_saveOnlySelfWithCompletion,但此方法同步执行。
4.MR_saveToPersistentStoreAndWait:类似于MR_saveToPersistentStoreWithCompletion,但此方法同步执行。
5.MR_saveWithOptions:completion:保存此上下文,以上四种方法最后都会调用此方法来执行。
6.MRSaveOptions可选选项:
(1)MRSaveOptionNone:空选项。默认只保存当前上下文以及其父上下文。使用异步方式。
(2)MRSaveParentContexts:保存此上下文以及所有上级上下文,直到数据同步到数据库文件。
(3)MRSaveSynchronously:使用同步方式。
(4)MRSaveSynchronouslyExceptRootContext:使用同步方式,但是根上下文使用异步。
三、NSManagedObjectContext数据同步
1.MR_observeContext:让当前上下文去监听另一个上下文的数据改变,当另一个上下文有数据更改时,会自动同步到此上下文。
2.MR_observeContextOnMainThread:同上,但是数据同步过程是在主线程做的。
3.MR_stopObservingContext:停止监听另一个上下文的数据改变。
四、Block方式关联存储
1.MR_saveWithBlock:传入一个上下文,作为当前上下文的子上下文。调用子上下文的performBlock(异步)方法,执行Block中的任务,最后将所有数据改变同步到数据库文件。
2.MR_saveWithBlock:completion:同上,增加一个任务结束的回调。
3.MR_saveWithBlockAndWait:传入一个上下文,作为当前上下文的子上下文。调用子上下文的performBlockAndWait(同步)方法,执行Block中的任务,最后将所有数据改变同步到数据库文件。