MKReverseGeocoder вызывает EXC_BAD_ACCESS? - PullRequest
6 голосов
/ 20 сентября 2010

У меня есть приложение, в котором периодически происходит сбой. Журналы сбоев показывают трассировку стека, которую мне сложно расшифровать, поэтому надеемся, что кто-то еще видел это и может указать мне правильное направление.

Обычно приложение запускает обратный запрос геокодирования при запуске, чтобы показать местоположение пользователя в метке. Кроме того, я делаю еще один запрос обратного геокодирования для конкретного вызова API.

Что происходит, так это то, что иногда этот MKReverseGeocoder возвращается очень долго. В конце концов я предполагаю, что получу ответный вызов при сбое, а иногда и получаю, но может пройти минут , прежде чем это произойдет.

Поскольку вызов API также выполняет другой запрос MKReverseGeocoder, я думаю, возможно, существует проблема с несколькими одновременными вызовами?

Вот моя трассировка стека:

Program received signal:  “EXC_BAD_ACCESS”.
(gdb) backtrace
#0  0x30c237a0 in -[MKPlacemark _mapkit_cache_heapTime] ()
#1  0x30bffe60 in compareTimes ()
#2  0x32403b24 in CFBinaryHeapAddValue ()
#3  0x30c0030c in -[MKCache setObject:forKey:] ()
#4  0x30c2aa48 in -[MKReverseGeocodeCache addPlacemark:forCoordinate:] ()
#5  0x30c2251c in -[MKReverseGeocoder requester:didReceiveResponse:forRequest:] ()
#6  0x3388cc1c in -[PBRequester _tryParseData] ()
#7  0x3388b288 in -[PBRequester connection:didReceiveData:] ()
#8  0x337490ce in -[NSURLConnection(NSURLConnectionReallyInternal) sendDidReceiveData:originalLength:] ()
#9  0x33748ff0 in _NSURLConnectionDidReceiveData ()
#10 0x30899ff8 in URLConnectionClient::_clientDidReceiveData ()
#11 0x3088ca3e in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload ()
#12 0x3088cb40 in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload ()
#13 0x3088cb40 in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload ()
#14 0x3088c8ce in URLConnectionClient::processEvents ()
#15 0x3088c878 in URLConnection::multiplexerClientPerform ()
#16 0x3088c7f8 in MultiplexerSource::perform ()
#17 0x3088c798 in MultiplexerSource::_perform ()
#18 0x323f4f48 in CFRunLoopRunSpecific ()
#19 0x323f4c1e in CFRunLoopRunInMode ()
#20 0x335051c8 in GSEventRunModal ()
#21 0x324a6c30 in -[UIApplication _run] ()
#22 0x324a5230 in UIApplicationMain ()
#23 0x000024f8 in main (argc=1, argv=0x2ffff504) at /Users/ben/projects/ABC/iphone/ABC/main.m:14

Поскольку не похоже, что он даже вызывает мой метод обратного вызова, я не знаю, где искать эту проблему EXC_BAD_ACCESS. Мой делегат, конечно, все еще активен (я смотрю на View Controller, который запустил запрос).

1 последнее замечание: пока что оно появилось только на iOS 3.1.3. Я еще не видел, чтобы это случилось для iOS 4.0.u

Ответы [ 2 ]

0 голосов
/ 23 августа 2012

Попробуйте использовать инструмент Zombies из профиля xcode. Это поможет вам определить, какая память объекта вызывает EXC_BAD_ACCESS.

0 голосов
/ 24 ноября 2011

Вот документ Google API для обратного геокодирования, который возвращает JSON, а также вывод XML и его надежный и стабильный API.

http://code.google.com/apis/maps/documentation/geocoding/

Например, этот URL обеспечивает вывод JSON,Используя это, вы можете решить вашу проблему. Дайте мне знать, будет ли она работать на вас или нет?

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false

...