iOS MagicalRecord 启动时崩溃
Posted
技术标签:
【中文标题】iOS MagicalRecord 启动时崩溃【英文标题】:iOS MagicalRecord Crash on launch 【发布时间】:2014-08-12 07:16:00 【问题描述】:我遇到了一个问题,即某些用户在使用 MagicalRecord(速记)v2.2 启动我的本机 ios 应用时遇到崩溃。
这不是典型的数据库迁移问题,因为首先它不会发生在所有用户身上,其次数据库架构没有改变(我有 git 日志证明这一点,以防万一我在制作一些 db 后尝试重现更改但未成功)。
删除和重新创建数据库似乎确实有效,但是如果应用程序中的后备代码检测到它之前因此问题而崩溃,它会清除并重新创建数据库。崩溃日志表明这是有效的,因为唯一设备和崩溃次数的比率是 1 比 1。
与数据库相关的启动时发生的所有事情如下:
[MagicalRecord setErrorHandlerTarget:self action:@selector(handleCoreDataError:)];
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"xxx.sqlite"];
主线程上的堆栈跟踪:
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x37d3f626 objc_msgSend + 5
1 Foundation 0x2dec102d -[NSError dealloc] + 60
2 libobjc.A.dylib 0x37d44b6b objc_object::sidetable_release(bool) + 174
3 libobjc.A.dylib 0x37d450d3 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 358
4 CoreFoundation 0x2d4d24c1 _CFAutoreleasePoolPop + 16
5 Foundation 0x2decb8e3 -[NSAutoreleasePool drain] + 122
6 CoreData 0x2d312fbf -[NSManagedObjectContext save:] + 942
7 xxx 0x00249223 __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke3 (NSManagedObjectContext+MagicalSaves.m:64)
8 CoreData 0x2d3769cd developerSubmittedBlockToNSManagedObjectContextPerform + 88
9 libdispatch.dylib 0x3821ed3f _dispatch_client_callout + 22
10 libdispatch.dylib 0x382216c3 _dispatch_main_queue_callback_4CF + 278
11 CoreFoundation 0x2d569681 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
12 CoreFoundation 0x2d567f4d __CFRunLoopRun + 1308
13 CoreFoundation 0x2d4d2769 CFRunLoopRunSpecific + 524
14 CoreFoundation 0x2d4d254b CFRunLoopRunInMode + 106
15 GraphicsServices 0x3243f6d3 GSEventRunModal + 138
16 UIKit 0x2fe31891 UIApplicationMain + 1136
17 xxx 0x0002e3cc main (main.m:18)
【问题讨论】:
【参考方案1】:嗯,这个错误似乎是你过度释放了错误对象。您是在某处明确调用[error release]
或[error autorelease]
吗?
【讨论】:
不,我在整个项目中都在使用 ARC,因此我没有进行明确的发布或自动发布调用。以上是关于iOS MagicalRecord 启动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
iOS MagicalRecord 之谜。为啥在 truncateAll 后重新启动时我的数据会重新出现?