删除Core Data对象时出现_Unwind_Resume异常

时间:2011-03-30 16:08:19

标签: iphone objective-c core-data gcc

我一直在崩溃,我无法调试。删除Core Data Objects后,它似乎偶尔会发生。我在不同的线程/上下文中删除并合并回主线程上的主上下文。这是罕见的,我无法一致地重现它,并且堆栈跟踪完全没用。这不是像_Unwind_SjLj_Resume的其他提及那样的迁移问题。

从谷歌搜索,_Unwind_SjLj_Resume正在解除异常。所以我编写的故事是我遇到了一些例外,当异常无法解决时会发生这个错误...有关如何继续的任何想法?

#0  0x33bd52d4 in __kill ()
#1  0x33bd52ca in kill ()
#2  0x33bd52bc in raise ()
#3  0x33be9d78 in abort ()
#4  0x33bd7986 in __assert_rtn ()
#5  0x32acab56 in _Unwind_SjLj_Resume ()
#6  0x33a47d56 in CFRunLoopRunSpecific ()
#7  0x33a47b8e in CFRunLoopRunInMode ()
#8  0x33b0e4aa in GSEventRunModal ()
#9  0x33b0e556 in GSEventRun ()
#10 0x32099328 in -[UIApplication _run] ()
#11 0x32096e92 in UIApplicationMain ()

4 个答案:

答案 0 :(得分:0)

如果您正在执行多个线程,请确保锁定持久存储。

看起来应该类似于:

[self.persistentStoreCoordinator lock];
NSManagedObjectContext *context = //your store;
[context save:&error];

if (error)
    // handle error

[self.persistentStoreCoordinator unlock];

答案 1 :(得分:0)

您可以查看this发帖。我遇到了一些非常相似的东西,并且能够找到对已发布对象的引用的原因(已经调用了dealloc的对象)。与您的情况一样,我正在删除NSManagedObjects。启用“停止Objective-C异常”允许我捕获异常。

答案 2 :(得分:0)

原来这是由于我的didSave中的错误 - isDeleted。我使用NSFileManager defaultManager调度文件删除,这不是线程安全的。在我的堆栈跟踪中没有任何迹象,但是我通过在保存例程中逐步执行汇编程序来跟踪它,并注意到runloop_handle_dispatch函数是最后一个操作并从那里推导出来的。

感谢您的帮助,Bleh!

答案 3 :(得分:0)

对于今后研究这个问题的任何人,我收到了这个例外,原因是因为我在FetchedResltsController中设置了一个缓存名称 - 缓存试图加载已从数据库中删除的行 - 也许应用程序在此期间退出删除过程。无论如何在调用initWithFetchRequest时将cacheName设置为nil可以解决我的问题。