
题:
但是,如果我的主线程上有NSManagedobjectContext,我可以在后台线程上创建一个NSManagedobject对象(没有将它附加到任何上下文 – 也就是说,只需在NSManagedobject上调用alloc / init),然后将该NSManagedobject传递回主线程并将其添加到上下文中?我已经查看了有关Core Data并发性的文档,但找不到任何说这种使用模式没问题的文档.
语境:
我有一个后台线程执行复杂的任务然后发布结果.结果是一个NSManagedobject子类,它包含一些属性:time,文件路径和成功或错误消息(作为字符串).我想在后台线程上创建结果对象,然后将其抛回主线程并将其添加到Core Data上下文中,它将在tableVIEw中显示.
如果我无法在后台线程上创建managedobject,那么我需要创建一个字典,将字典传递给主线程,读取键,从这些值创建managedobject等等.如果可能的话,在后台线程上使用managedobject.
解决方法 更好的方法是每个线程都有一个上下文.这样每个线程都有自己的便笺本可以玩.然后,当后台线程完成时,告诉主线程更新其视图或ui表视图或每个人如何呈现数据.发生更改时,您需要通知主线程.最大的问题是,不同线程和主线程之间的上下文彼此不了解.核心数据中有一种方法可以使上下文保持同步.如果要保存,后台线程上的上下文应该广播NSManagedobjectContextDIDSaveNotification通知.
例如,在您的NSOperation中的main方法中,您可以这样做:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addobserver:self selector:@selector(mergeChanges:) name:NSManagedobjectContextDIDSaveNotification object:context];
mergeChanges将是您的NSOperation实例中的私有方法.
合并更改的示例
- (voID)mergeChanges:(NSNotification *)notification{ ApplicationController *appController = [[NSApplication sharedApplication] delegate]; NSManagedobjectContext *mainContext = [appController managedobjectContext]; // Merge changes into the main context on the main thread [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDIDSaveNotification:) withObject:notification waitUntilDone:YES]; } 总结 以上是内存溢出为你收集整理的objective-c – NSManagedObject:在单独的线程上创建全部内容,希望文章能够帮你解决objective-c – NSManagedObject:在单独的线程上创建所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)