ios - 核心数据、并发和 GCD
<p><p>我在尝试弄清楚如何同时正确地使用 Core Data 时遇到了困难。</p>
<p>每次有更新时,我都必须在添加新数据之前清除实体的核心数据。因此我决定使用这个片段:</p>
<pre><code>-(void)addSale:(NSArray *)results{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *entity = @"Sale";
CoreDataManager.sharedInstance.delegate = self;
dispatch_async(dispatch_get_main_queue(), ^{
;
});
NSManagedObjectContext *privateContext = [ initWithConcurrencyType:NSPrivateQueueConcurrencyType];
privateContext.parentContext = CoreDataManager.sharedInstance.managedObjectContext;
for (NSDictionary *dataDictionary in )
{
NSManagedObject *managedObject = ;
// Fill ManagedObject
// .....
}
NSError *error;
;
if (error != nil) {
NSLog(@"Couldn't save private context bcoz of %@\n%@", error, error.localizedDescription);
}
dispatch_async(dispatch_get_main_queue(), ^{
// Save Main ManagedObjectContext
;
});
});
}
</code></pre>
<p>问题是我必须为其他 2 个实体做同样的事情,同时保持 UI 响应,而不会对核心数据产生任何影响。</p>
<p>有没有更好的方法来处理这个问题?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><ol>
<li>创建一个与 <code>NSPersistentStoreCoordinator</code> 关联的私有(private)上下文。</li>
<li>删除私有(private)上下文中的对象。</li>
<li>保存私有(private)上下文。</li>
<li>如果正在使用任何这些对象,请告诉主队列上下文重置。</li>
</ol>
<p>确实没有理由删除主上下文中的对象(您似乎正在使用单例)。</p>
<p>如果您的 UI 没有触及您要删除的任何对象,那么您无需重置与用户界面关联的上下文。</p>
<p>您也可以不进行重置,而是让主队列上下文使用来自私有(private)队列上下文的保存通知,这将获得相同的结果。</p></p>
<p style="font-size: 20px;">关于ios - 核心数据、并发和 GCD,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/38421930/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/38421930/
</a>
</p>
页:
[1]