iOS MagicalRecord在发布时崩溃

时间:2014-08-12 07:16:01

标签: ios objective-c core-data magicalrecord

我遇到一个问题,一些用户使用MagicalRecord(速记)v2.2在我的原生iOS应用程序中启动时崩溃。

这不是典型的数据库迁移问题,因为首先它不会发生在所有用户身上,其次数据库架构尚未更改(我有git日志证明了这一点,以防我在创建一些db之后尝试重现变化,但没有成功)。

删除和重新创建数据库似乎确实有效,因为应用程序中的后备代码会清除并重新创建数据库,前提是它已检测到由于此问题而导致数据库崩溃。崩溃日志表明这是有效的,因为唯一设备和崩溃次数的比率为1比1。

与db相关的启动时发生的所有事情如下:

[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 个答案:

答案 0 :(得分:0)

好吧,这个错误似乎是你过度发布了错误对象。您是否在某处明确地呼叫[error release][error autorelease]