使用具有核心数据库的多个托管对象上下文

时间:2015-04-07 10:37:17

标签: ios iphone multithreading core-data

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

  1. 线程1将在CoreData基表(A)中插入数据。
  2. 线程2将从另一个表(B)中获取数据。
  3. 我该怎么做?

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

1 个答案:

答案 0 :(得分:18)

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

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

示例: -

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

然后在你的线程上使用threadContext ......

您可以在主线程上继续与UI相关的提取。或者,如果它也必须有其他线程,也可以为它创建一个上下文。

深入了解核心数据并发性,请参阅a tutorial

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

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

或者只是在这个图表下 -

Parent/Child context relationship.

对文章网址的信任......

相关问题