2015-04-07 73 views
5

我正在使用核心数据来存储和获取我的数据,但我遇到了一些问题。我想使用两个线程并行进行以下操作:在核心数据库中使用多个托管对象上下文

  1. 线程一将在CoreData基表(A)中插入数据。
  2. 线程2将从另一个表(B)中获取数据。

我该怎么做?

我做了一些关于谷歌的研究,他们说,我们需要使用多个托管对象的上下文,但我不知道我们将如何使用它。

+0

为什么要使用两个线程做在平行下? – andrewbuilder

+0

单个持久性存储协调器将管理向表A中插入数据并从表B获取数据的过程。您不需要两个托管对象上下文就可以成功工作。但是,您可以创建专用线程来管理持久性过程(即保存数据),以免阻塞用户界面。 – andrewbuilder

回答

15

你不应该在多个线程上访问你的NSManagedObjectContext。在AppDelegate中创建的NSManagedObjectContext只能在主线程中访问。

它意味着,你应该为你创建的每个线程创建一个NSManagedObjectContext。确保将线程的NSManagedObjectContext的父上下文设置为主上下文。

例子: -

NSManagedObjectContext *mainContext; // = getMainContext 
NSManagedObjectContext *threadContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
threadContext.parentContext = mainContext; 

,然后在你的线程中使用threadContext ...

您可以继续获取相关的主线程UI。或者,如果有其他线程也很重要,请为其创建一个上下文。

深度认识的核心数据并发看到a tutorial

设置父/子上下文关系将合并你的线程与主上下文(它的父上下文)语境。

了解父/子上下文关系check this URL

或者只是这张图下 -

Parent/Child context relationship.

学分文章网址...

+0

是的,我们需要为线程使用多个托管对象上下文。我关心的是,当我将threadContext用于其他线程,然后如何更新我的主要管理对象上下文,因为我在教程中阅读,我们必须在从线程上下文插入或更新数据库表后更新主线程上下文。 –

+0

请检查我的编辑... –

+0

@Mayur Deshmukh当我想要获取大量记录时,父子模式如何工作。 –

相关问题