【发布时间】:2015-11-19 11:56:05
【问题描述】:
我有一个使用 Core Data 的应用程序。这是我第一次使用它,所以我使用的是 Apple 在 AppDelegate.m 中提供的相同核心数据堆栈。
我面临的问题描述如下:
我有一个名为firstSaver 的方法,它执行以下操作:
+(void) firstSaver {
// 1) get some values from system
// 2) do some processing on those values ( This takes considerable time)
// 3) create a NSManagedObject instance of entity A ,say mObj ,by filling in the processed values. I create multiple objects. In this step, I use the main managedObjectContext that is provided by the AppDelegate to me.
// 4) pass this NSManagedObject to secondSaver like :
[self secondSaver : mObj];
// 5) save the managedObjectContext.
}
第二种方法是:
+(void) secondSaver : (NSManagedObject *)someObj {
// 1) again fetch some values, this too takes considerable time.
// 2) create a NSManagedObject which is instance of entity B, fill the processed values, attach this instance to the someObj instance.
return;
}
请注意,A 与 B 是一对多的关系,即 A 包含 B 的 NSSet。
如图所示,这两个调用需要相当长的时间才能完成,并且会冻结 UI。我不希望它发生,因此我创建了一个序列号dispatch_queue,并使用dipatch_async 在其上调用了firstSaver。
问题是NSManagedObjectContext 的实例是在主线程上创建的,如果我在dispatch_async 中访问它,它会导致EXEC_BAD_ACCESS。
处理这种情况并使用适当的托管对象上下文来处理多线程的正确方法可能是什么?任何帮助将不胜感激。
【问题讨论】:
标签: ios objective-c multithreading core-data