objective-c - '只能使用 -performBlock : on an NSManagedObjectContext that was created with a queue.' 错误

标签 objective-c multithreading crash nsmanagedobjectcontext

我用 NSManagedObjectContext performBlock{}但,
我的应用程序总是在这里崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can only use -performBlock: on an NSManagedObjectContext that was created with a queue.'



如何知道关于 NSManagedObjectContext 的正确线程.
创建NSManagedObjectContext代码在这里
Person *aPerson = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[CoreDataManager sharedInstance].managedObjectContext];

请给一些意见

最佳答案

像这样创建您的 ManagedObjectContext

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
                     initWithConcurrencyType:NSMainQueueConcurrencyType];
NSMainQueueConcurrencyType创建一个与主调度队列相关联的上下文,从而与主线程相关联。您可以使用这样的上下文将其链接到需要在主线程上运行的对象,例如 UI 元素。
NSPrivateQueueConcurrencyType创建和管理一个私有(private)的调度队列来操作。您必须使用新方法 performBlock: 或 performBlockAndWait:。然后上下文将在其自己的私有(private)队列上执行传递的 block 。

最后,NSConfinementConcurrencyType是默认类型,只能在创建它的线程中使用。

关于objective-c - '只能使用 -performBlock : on an NSManagedObjectContext that was created with a queue.' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557745/

相关文章:

python - 当我按配置空闲时,空闲崩溃

objective-c - 如何在NSTimer循环中刷新TableView Cell数据

c++ - CoreAudio AudioUnitSetProperty 总是设置采样率失败

objective-c - YouTube Objective-C HTTP POST请求评论

c++ - 在 openmp 中使用不同线程组装 vector 时缩放比例不佳

multithreading - 如何检测线程是否正在运行

ios - 我遇到了一次非常奇怪的崩溃。请查看我的堆栈跟踪

iphone - NSLayoutConstraint错误: making full subview

python - 如果持有数据库连接的线程死亡,数据库连接是否会返回池?

ios - AVPlayer播放期间出现无法解释的崩溃