objective-c – NSManagedObject:在单独的线程上创建

objective-c – NSManagedObject:在单独的线程上创建,第1张

概述我知道Core Data不是线程安全的,并且与上下文关联的NSManagedObjectContext和NSManagedObjects不能从线程传递给线程. 题: 但是,如果我的主线程上有NSManagedObjectContext,我可以在后台线程上创建一个NSManagedObject对象(没有将它附加到任何上下文 – 也就是说,只需在NSManagedObject上调用alloc / in 我知道Core Data不是线程安全的,并且与上下文关联的NSManagedobjectContext和NSManagedobjects不能从线程传递给线程.

题:

但是,如果我的主线程上有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:在单独的线程上创建所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005480.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存