多个NSManagedContext下数据同步崩溃问题

2012-09-21 05:19:58 +08:00
 acen
=== 背景 ===
我有两个NSManagedContext,主MOC为NSPrivateQueueConcurrencyType,它在后台线程运行,上传一堆图片。上传每张图片时都会实时更新该照片的上传进度。表示上传进度的字段为progress,该字段为Transient类型,上传完成后才保存照片的状态到数据库中。

另一个MOC类型为NSMainQueueConcurrencyType,设其ParentContext为主MOC。在一个显示上传进度的界面中,使用NSFetchedResultsController做数据源,它后端MOC即为这个子MOC。在这个界面中,监听主MOC的NSManagedObjectContextDidSaveNotification和NSManagedObjectContextObjectsDidChangeNotification事件。相关的几个处理方式如下。

https://gist.github.com/3758238

=== 问题 ===
在测试的touch,ip4,ipad3设备中,后台上传都没有出现问题。进入上传进度界面后,touch和ip4也都没有出现问题,但是用ipad3时基本上都会出现执行一段时间后程序崩溃或陷入死锁的问题。崩溃后主线程的堆栈如下图。



偶尔最后一条堆栈也发生在[NSDate isEqual]上,排序字段的类型是NSDate的。
死锁时的堆栈如图。



3个设备的版本都是5.1.1,touch和ipad越狱了。
搞了好久了都没有找到解决方案。看哪位高手能给点灵感~
3810 次点击
所在节点    iDev
3 条回复
zhigang1992
2012-09-21 09:08:35 +08:00
为啥要用parentContext呢?记得paul老头说parentContext和子context是没有自动同步的。NSFetchedResultsController是每次都得重新refetch。再两个Notification method里面价格self.fetchResultController重新刷新一下。(本人菜鸟。。。)
zhigang1992
2012-09-21 09:19:08 +08:00
我错了..=_=|||
acen
2012-09-21 15:10:52 +08:00
@zhigang1992 从这篇文章( http://wbyoung.tumblr.com/post/27851725562/core-data-growing-pains )看,使用子context可能会产生一些问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48363

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX