2011-03-06 71 views
2

我在分析我的crashlog时遇到问题。当我点击应用程序图标启动应用程序时,iPhone有时会崩溃。该应用程序已在后台“运行”,但未处于活动状态。这是符号崩溃日志:iOS应用程序在Core Location回调机器中崩溃

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); 

请给我一个提示,如何找到错误。
预先感谢您!

+0

看起来像'CLLocationManager'中的一些代码崩溃了。您是否在应用中使用位置跟踪? – 2011-03-06 19:43:25

+0

嗨!是的,我使用位置跟踪。我在AppDelegate中有一个CLLocationManager,我从didFinishLaunchingWithOptions方法开始。每当使用需要位置的视图控制器时,我将视图控制器设置为CLLocationManager的委托,以便使用适当的didUpdateToLocation方法。这个可以吗?谢谢! – sqeez3r 2011-03-06 20:31:14

+0

您是否在进入背景时将代表设置为零?如果不是,已经被设置为委托的视图控制器可能已被释放,这将导致崩溃。另外,您需要查看崩溃日志的顶部以查看发生的位置。如果崩溃在线程0上,那么你的主函数将总是在回溯的底部。 – ughoavgfhw 2011-03-07 00:41:29

回答

4

在从控制器返回(或至少在控制器的dealloc)返回之前,您是否将其设置为代表nil?我怀疑CLLocationManager试图发送一个消息给已经释放的委托 - 这就是为什么它在obj_msgSend崩溃的原因。

+0

&@ughoavgfhw:你们都是绝对正确的!我忘记将代表设置为零。我认为这不会成为问题,因为每次都必须有一个分配的视图控制器。非常感谢您的帮助!我现在将viewWillDisappear方法中的GLLocationManager设置为零,我希望应用程序不会再崩溃。 – sqeez3r 2011-03-07 19:28:25

0

我在4.3上测试我的应用程序时遇到了同样的问题,但在5.0中没有。问题是我试图在一个委托方法中解除CLLocationManager的分配。它在5.0中正常工作,但每次都会崩溃运行4.3的iPhone 3GS。

最后,我将CLLocationManager对象作为属性,然后在委托方法中将委托设置为nil,并将块分派给主线程以释放对象。