我遇到一个问题,一些用户使用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)
答案 0 :(得分:0)
好吧,这个错误似乎是你过度发布了错误对象。您是否在某处明确地呼叫[error release]
或[error autorelease]
?