iOS应用程序在Core Location回调机制中崩溃
我在分析我的崩溃日志时遇到问题。 当我点击应用程序图标启动应用程序时,iPhone有时会崩溃。 该应用已在后台“运行”,但它不活跃。 这是符号化的崩溃日志:
Thread 0 Crashed: 0 libobjc.A.dylib 0x33479470 objc_msgSend + 28 1 CoreLocation 0x3436f68e -[CLLocationManager onClientEvent:supportInfo:] + 98 2 CoreLocation 0x3436f804 OnClientEvent + 16 3 CoreLocation 0x3436b522 CLClientInvokeCallback(__CLClient*, CLClientEvent, __CFDictionary const*) + 42 4 CoreLocation 0x3436cf74 CLClientHandleDaemonDataRegistration(__CLClient*, CLDaemonCommToClientRegistration const*, __CFDictionary const*) + 668 5 CoreLocation 0x3436d4c8 CLClientHandleDaemonData(__CFMessagePort*, long, __CFData const*, void*) + 212 6 CoreFoundation 0x33a813fe __CFMessagePortPerform + 242 7 CoreFoundation 0x33a556f8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20 8 CoreFoundation 0x33a556bc __CFRunLoopDoSource1 + 160 9 CoreFoundation 0x33a47f76 __CFRunLoopRun + 514 10 CoreFoundation 0x33a47c80 CFRunLoopRunSpecific + 224 11 CoreFoundation 0x33a47b88 CFRunLoopRunInMode + 52 12 GraphicsServices 0x33b0e4a4 GSEventRunModal + 108 13 GraphicsServices 0x33b0e550 GSEventRun + 56 14 UIKit 0x32099322 -[UIApplication _run] + 406 15 UIKit 0x32096e8c UIApplicationMain + 664 16 Norddeich 0x00002764 main (main.m:14) 17 Norddeich 0x00002718 start + 32
据我了解堆栈跟踪,错误发生在main.m. 第14行是默认代码的一部分:
int retVal = UIApplicationMain(argc, argv, nil, nil);
请给我一个提示,如何找到错误。
先谢谢你!
在从控制器(或至少在控制器的dealloc
)返回之前,它是否将它的委托设置为nil
? 我怀疑CLLocationManager正在尝试向已经解除分配的委托发送消息 – 这就是它在obj_msgSend崩溃的原因。
我在4.3上测试我的应用程序时遇到同样的问题,但不是5.0。 问题是我试图在其中一个委托方法中释放CLLocationManager。 它在5.0中运行良好,但每次都会崩溃运行4.3的iPhone 3GS。
最后,我将CLLocationManager对象作为属性,然后在委托方法中将委托设置为nil,并将块分派给主线程以释放对象。