boi*_*kan 0 multithreading core-data grand-central-dispatch nsmanagedobject swift
我需要能够从Core Data中获取对象并将它们保存在内存中的可变数组中,以避免不断获取和降低UI/UX.问题是我抓住了其他线程上的对象.我也有时在其他线程上写这些对象.因此,我不能只是保存NSManagedObjects
在一个数组中,只是调用类似的东西,myManagedObjectContext.performBlock
或者myObject.managedObjectContext.PerformBlock
因为你不应该在线程之间传递MOC.
我正在考虑使用自定义对象将我需要的数据从CD对象中抛出.这感觉有点愚蠢,因为我已经为实体创建了Model/NSManagedObject类,并且因为自定义对象是可变的,所以它仍然不是线程安全的.这意味着我必须为多个线程上的对象操作执行类似串行队列的操作?因此,例如,每当我想要读/写/删除对象时,我必须将它扔到我的对象serialQueue中.
这一切看起来真的很讨厌所以我想知道这个问题有什么常见的设计模式或类似的东西吗?有没有更好的方法呢?
我怀疑你需要Core Data和你的UI之间的自定义对象.有一个更好的答案:
做这件事有很多种方法:
NSFetchedResultsController
.有点像你的可变数组,但有一个委托,它会在对象发生变化时通知.强烈推荐NSManagedObjectContextDidSaveNotification
通过NSNotification
中心收听事件并对通知做出反应.正在更改的对象将位于userInfo
通知中.在这三个中,使用a NSFetchedResultsController
通常是正确的答案.当它到位时,您只需更改其他线程上需要更改的内容,保存上下文即可完成.用户界面将自行更新.
归档时间: |
|
查看次数: |
320 次 |
最近记录: |