2011-03-06 70 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,並將塊分派給主線程以釋放對象。