【发布时间】:2014-01-05 19:55:41
【问题描述】:
我有一个NSOperationQueue,其中添加了一些NSBlockOperations,其中包括blockOperations A 和B。NSOperationQueue 的maxConcurrencyOperationCount 为1。
blockOperation B,依赖于 A 的完成。在每个 blockOperations 中,我调用一个方法,该方法又调用另一个方法,该方法初始化一个新的NSManagedObjectContext(使用来自单例的 persistentStoreCoordinator),我用它来创建对象并将对象添加到 Core Data 数据库。前面提到的 A 和 B 中的第二个方法调用所调用的代码如下所示(每个方法略有不同):
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
managedObjectContext.persistentStoreCoordinator = [[CoreDataController sharedCoreDataController] persistantStoreCoordinator];
for (NSDictionary *articleDictionary in array) {
if (![Article articleExistsWithIDInDictionary:articleDictionary inContext:managedObjectContext]) {
[Article articleFromDictionary:articleDictionary inContext:managedObjectContext];
}
}
[[CoreDataController sharedCoreDataController] saveContext:managedObjectContext];
// method ends.
saveContext: 代码如下所示:
NSError *error = nil;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
花了很多时间阅读有关核心数据并发、NSOperation 等的 Apple 文档,但我仍然不确定我使用 NSManagedObjectContext 所做的事情是否是线程安全的,并且通常被认为是可以的?一些澄清和/或表明我应该做不同的事情将不胜感激。如果您需要查看更多代码,请询问。
提前致谢。
【问题讨论】:
标签: core-data nsmanagedobjectcontext nsoperation nsoperationqueue