ios - 核心数据设置多个 managedObjectContexts
<p><p>在我正在开发的应用程序中,我需要同时访问和写入 Core Data。我已经能够收集到这意味着我需要使用多个 managedObjectContexts,但我不明白我应该如何设置这两个 managedObjectContexts。 </p>
<p>我知道,一旦我设置好它们,我需要在后台线程上对其 managedObjectContext 执行写操作,然后通过如下操作合并数据:<a href="https://stackoverflow.com/questions/7540801/core-data-and-threads-grand-central-dispatch/7545514#7545514" rel="noreferrer noopener nofollow">Core Data and threads / Grand Central Dispatch</a> . </p>
<p>所以我的问题是,我将如何启动两个单独的 managedObjectContexts 以便我可以按照描述使用它们?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您必须像这样使用相同的 <code>NSPersistentStoreCoordinator</code> 创建两个单独的 <code>NSManagedObjectContexts</code>,</p>
<p>首先在你的模型类中创建两个 <code>NSManagedObjectContexts</code> 名称分别为 <code>backgroundManagedObjectContext</code> 和 <code>mainBackgroundManagedObjectContext</code></p>
<pre><code>+ (NSManagedObjectContext *)backgroundManagedObjectContext
{
static NSManagedObjectContext * backgroundManagedObjectContext;
if(backgroundManagedObjectContext != nil){
return backgroundManagedObjectContext;
}
@try {
NSPersistentStoreCoordinator *coordinator = ;
if (coordinator != nil) {
backgroundManagedObjectContext = [ initWithConcurrencyType:NSPrivateQueueConcurrencyType];
];
}
}
@catch (NSException *exception) {
NSLog(@"Exception occur %@",exception);
}
return backgroundManagedObjectContext;
}
</code></pre>
<p>那么两者都需要获得相同的 <code>persistentStoreCoordinator</code>
然后需要将您的 <code>backgroungManagedObjectContext</code> 合并到 <code>mainBackgroundManagedObjectContext</code>,这样每当您像这样将数据保存到 <code>backgroundManageObjectContext</code> 时都会创建 <code>NSNotification</code> </p>
<pre><code>[ addObserver:self
selector:@selector(contextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
</code></pre>
<p>那么你必须实现这个通知方法来更新你的 <code>mainManagedObjectContext</code> 像这样</p>
<pre><code>- (void)contextDidSave:(NSNotification *)notification
{
SEL selector = @selector(mergeChangesFromContextDidSaveNotification:);
[ performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 核心数据设置多个 managedObjectContexts,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/19107822/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/19107822/
</a>
</p>
页:
[1]