我有来自Crashlytics的这样一份报告:
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x000000019503fbd0 objc_msgSend + 16
1 CoreFoundation 0x00000001836e5458 CFRelease + 524
2 CoreFoundation 0x00000001836f1a18 -[__NSArrayM dealloc] + 152
3 libobjc.A.dylib 0x0000000195045724 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564
4 CoreFoundation 0x00000001836e9074 _CFAutoreleasePoolPop + 28
5 Foundation 0x000000018461a588 -[NSAutoreleasePool release] + 148
6 UIKit 0x00000001882b4460 -[UIApplication _run] + 588
7 UIKit 0x00000001882aefac UIApplicationMain + 1488
有什么办法可以解决这个问题吗?它发生在客户设备上,所以我没有机会重现它。
答案 0 :(得分:1)
对于像这样的崩溃,如果崩溃是可重现的,请在项目的环境变量中启用NSZombies。这将使释放的对象保持活动状态(僵尸),当其中一个消息被发送时,将在崩溃对象上捕获调用者和消息。
完成后将其关闭,因为它可以阻止应用程序的内存,因为没有为僵尸跟踪发布对象。
答案 1 :(得分:1)
某些逻辑代码需要在后台运行。您需要尝试调试代码错误的位置,然后添加此代码
DispatchQueue.main.async(execute: {
// your code
})
答案 2 :(得分:0)
这里已经回答:objc_msgSend [__NSArrayM dealloc] crash report sometimes from Crashlytics
基本上,将您的Crashlytics框架升级到3.0.9以上。崩溃发生在崩溃报告框架本身。