Сбой приложения iOS в механизме обратного вызова Core Location - PullRequest
2 голосов
/ 06 марта 2011

У меня проблемы с анализом моего аварийного журнала. Иногда происходит сбой 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);

Пожалуйста, подскажите, как найти ошибку.
Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

Вы устанавливаете его делегат на nil перед возвратом из контроллера (или, по крайней мере, в dealloc контроллера)? Я подозреваю, что CLLocationManager пытается отправить сообщение делегату, которое уже освобождено - вот почему он падает на obj_msgSend.

0 голосов
/ 25 апреля 2012

У меня была такая же проблема при тестировании моего приложения на 4.3, но не в 5.0.Проблема заключалась в том, что я пытался освободить CLLocationManager внутри одного из методов делегата.В 5.0 он работает нормально, но каждый раз вылетает iPhone 3GS, работающий на 4.3поток для освобождения объекта.

...