我一直在崩溃,我无法调试。删除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 ()
答案 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可以解决我的问题。