6

I have an app that is exhibiting an intermittent crash. The crash logs are showing a stack trace that is tough for me to decipher, so hoping that someone else has seen this and can point me in the right direction.

Basically the app does a reverse geocoding request at startup to show the user's location in a label. Additionally, I do another reverse geocoding request for a specific API call.

What's happening is that sometimes this MKReverseGeocoder takes a really long time to come back. Eventually I assume that I'll get a failure callback, and sometimes I do, but it can be minutes before this happens.

Since the API call is also issuing another MKReverseGeocoder request, I think perhaps there is an issue with multiple concurrent calls?

Here is my stacktrace:

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

Since it doesn't look like it's even calling my callback method I don't know where to look for this EXC_BAD_ACCESS issue. My delegate is certainly still active (I'm staring at the View Controller that launched the request).

1 last note: It has only appeared so far on iOS 3.1.3. I haven't seen it happen for iOS 4.0 yet.u

Ben Scheirman
  • 40,531
  • 21
  • 102
  • 137
  • 2
    can you post the code where u are doing the reverse geocoding? might help pointing out your problem – Daniel Sep 20 '10 at 20:03
  • This particular stack trace is showing the one that happens immediately when the app launches. Another screen has a button that calls a remote API which, beforehand, also calls for another RGC. This doesn't always crash. It has only happened once out of about 6 tests today. – Ben Scheirman Sep 20 '10 at 20:59
  • I have hit upon exactly the same problem. I too am using 2 separate instances of MKReverseGeocoder in separate threads. This being my requirement though. All that you have mentioned applies exactly the same to me too. It appears in 3.0 but not in 4.0+. How have you solved this issue? I would like to add though that, when I was debugging to find out the answer using breakpoints wherever appropriate, I found out that this crash did not occur. This indeed tells that the crash is due to some concurrency. Though, how did you fix this issue in iOS 3.0? – Raj Pawan Gumdal Nov 03 '10 at 12:40
  • Raj, I have yet to fix this issue. It's pretty troublesome. – Ben Scheirman Nov 03 '10 at 14:20
  • Have you tried google reverse Geo coding API? – Ankit Vyas Nov 24 '11 at 13:05

2 Answers2

0

Try to use Zombies instrument from the xcode profile. This will help you to find which object memory causing the EXC_BAD_ACCESS.

Allen
  • 222
  • 5
  • 15
  • I don't remember what the final outcome was (this was 2 years ago) but turning on Zombies did help to find the issue. Marking this one as correct. – Ben Scheirman Aug 23 '12 at 12:59
0

Here is a google API document for Reverse Geocoding which returns JSON as well as XML output and it's trustable and stable api.

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

for Example this url provides JSON output so using this you can solve your problem.Let me know will it work for you or not?

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

Ankit Vyas
  • 7,507
  • 13
  • 56
  • 89