我使用NSManagedObjectContext performBlock{}
但,
我的应用程序总是崩溃
***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因是:'只能在使用队列创建的NSManagedObjectContext上使用-performBlock:'
如何了解NSManagedObjectContext
的正确主题。
创建NSManagedObjectContext
代码在这里
Person *aPerson = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[CoreDataManager sharedInstance].managedObjectContext];
请发表一些意见
答案 0 :(得分:0)
像这样创建你的ManagedObjectContext
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
NSMainQueueConcurrencyType
创建一个与主调度队列相关联的上下文,从而创建主线程。您可以使用这样的上下文将其链接到在主线程上运行所需的对象,例如UI元素。
NSPrivateQueueConcurrencyType
创建并管理要运行的私有调度队列。您必须使用新方法performBlock:或performBlockAndWait:。然后,上下文将在其自己的专用队列上执行传递的块。
最后,NSConfinementConcurrencyType
是默认类型,只能在创建它的线程中使用。
答案 1 :(得分:0)
错误并未表示您使用的是错误的线程。它表示只能在使用队列创建的上下文中使用-performBlock:
。如NSManagedObjectContext
/ Concurrency的类引用中所述,这只是使用NSPrivateQueueConcurrencyType
或NSMainQueueConcurrencyType
选项之一创建的上下文。
使用基于队列的并发类型与performBlock:和performBlockAndWait:一起使用上下文。