【问题标题】:MKReverseGeocoder causing EXC_BAD_ACCESS?MKReverseGeocoder 导致 EXC_BAD_ACCESS?
【发布时间】:2011-04-14 21:01:33
【问题描述】:

我的应用出现间歇性崩溃。崩溃日志显示的堆栈跟踪对我来说很难破译,因此希望其他人已经看到了这一点并可以为我指明正确的方向。

基本上,该应用在启动时会执行反向地理编码请求,以在标签中显示用户的位置。此外,我对特定 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 问题。我的委托肯定仍然处于活动状态(我正盯着发起请求的视图控制器)。

1 最后一点:它目前只出现在 iOS 3.1.3 上。我还没有看到 iOS 4.0 发生这种情况。u

【问题讨论】:

  • 你能把代码贴在你做反向地理编码的地方吗?可能有助于指出您的问题
  • 这个特定的堆栈跟踪显示了应用启动时立即发生的堆栈跟踪。另一个屏幕有一个调用远程 API 的按钮,该 API 事先也调用另一个 RGC。这并不总是崩溃。在今天的大约 6 次测试中,它只发生了一次。
  • 我遇到了完全相同的问题。我也在单独的线程中使用 2 个单独的 MKReverseGeocoder 实例。这是我的要求。你提到的一切也同样适用于我。它出现在 3.0 中,但不在 4.0+ 中。你是如何解决这个问题的?我想补充一点,当我在调试时使用断点找到答案时,我发现没有发生这种崩溃。这确实表明崩溃是由于某些并发性造成的。不过,您是如何在 iOS 3.0 中解决此问题的?
  • Raj,我还没有解决这个问题。挺麻烦的。
  • 你试过谷歌反向地理编码API吗?

标签: iphone ios4 exc-bad-access mkreversegeocoder


【解决方案1】:

尝试使用 xcode 配置文件中的 Zombies 乐器。这将帮助您找到导致 EXC_BAD_ACCESS 的对象内存。

【讨论】:

  • 我不记得最终结果是什么(这是 2 年前),但打开 Zombies 确实有助于找到问题所在。将此标记为正确。
【解决方案2】:

这是一个用于反向地理编码的谷歌 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2016-11-19
    • 2012-10-02
    • 2017-03-15
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多