Google Maps iOS SDK在销毁GMSMapView时偶尔崩溃

5

我的应用程序中有时会在导航离开一个包含 GMSMapView 的视图(从我的 UINavigationController 弹出)时崩溃。它在第10个线程上崩溃,以下是崩溃信息:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000004
Crashed Thread:  10

并且该线程的堆栈跟踪信息:

Thread 10 name:  Dispatch queue: URLConnection
Thread 10 Crashed:
0   libsystem_c.dylib               0x39ef897c OSAtomicAdd32 + 0
1   CoreData                        0x31bf3de4 _PFfastQueueRelease + 24
2   CoreData                        0x31bd3ee8 -[NSManagedObject release] + 224
3   CoreFoundation                  0x31d2d30c CFRelease + 96
4   CoreFoundation                  0x31d47e96 -[__NSDictionaryM dealloc] + 130
5   Trail Tracker GPS               0x00206076 -[GMSTileDataCache .cxx_destruct] + 162
6   libobjc.A.dylib                 0x39a90f3a object_cxxDestructFromClass(objc_object*, objc_class*) + 54
7   libobjc.A.dylib                 0x39a8e0ce objc_destructInstance + 30
8   libobjc.A.dylib                 0x39a8e3a2 object_dispose + 10
9   Trail Tracker GPS               0x00201810 -[GMSTileDataCache dealloc] + 172
10  Trail Tracker GPS               0x0030da12 -[GMSDASHTileService .cxx_destruct] + 318
11  libobjc.A.dylib                 0x39a90f3a object_cxxDestructFromClass(objc_object*, objc_class*) + 54
12  libobjc.A.dylib                 0x39a8e0ce objc_destructInstance + 30
13  libobjc.A.dylib                 0x39a8e3a2 object_dispose + 10
14  Trail Tracker GPS               0x00309786 -[GMSDASHTileService dealloc] + 182
15  libobjc.A.dylib                 0x39a90f3a object_cxxDestructFromClass(objc_object*, objc_class*) + 54
16  libobjc.A.dylib                 0x39a8e0ce objc_destructInstance + 30
17  libobjc.A.dylib                 0x39a8e3a2 object_dispose + 10
18  CoreFoundation                  0x31d2d30c CFRelease + 96
19  CoreFoundation                  0x31d37a0e -[__NSArrayI dealloc] + 74
20  Trail Tracker GPS               0x00230e84 -[GMSDASHStreamingBody .cxx_destruct] + 40
21  libobjc.A.dylib                 0x39a90f3a object_cxxDestructFromClass(objc_object*, objc_class*) + 54
22  libobjc.A.dylib                 0x39a8e0ce objc_destructInstance + 30
23  libobjc.A.dylib                 0x39a8e3a2 object_dispose + 10
24  CoreFoundation                  0x31d2d30c CFRelease + 96
25  CFNetwork                       0x31aececa CoreReadStreamFromCFReadStream::~CoreReadStreamFromCFReadStream() + 38
26  CFNetwork                       0x31aece8a CoreReadStreamFromCFReadStream::~CoreReadStreamFromCFReadStream() + 6
27  CoreFoundation                  0x31d2d3ce CFRelease + 290
28  CFNetwork                       0x31a4f7be HTTPRequest::~HTTPRequest() + 74
29  CFNetwork                       0x31a4f76a HTTPRequest::~HTTPRequest() + 6
30  CoreFoundation                  0x31d2d3ce CFRelease + 290
31  CFNetwork                       0x31a54992 URLRequest::~URLRequest() + 106
32  CFNetwork                       0x31a5491e URLRequest::~URLRequest() + 6
33  CoreFoundation                  0x31d2d3ce CFRelease + 290
34  CFNetwork                       0x31a4464c __CFURLCacheNode::~__CFURLCacheNode() + 40
35  CFNetwork                       0x31a429de __CFURLCacheNode::~__CFURLCacheNode() + 6
36  CFNetwork                       0x31a4f57e __CFURLCache::RemoveResponseFromCacheContainers(__CFURLCacheNode*, _CFCachedURLResponse const*, __CFString const*, bool) + 158
37  CFNetwork                       0x31a4d71e __CFURLCache::AddResponseIntoCacheContainers(__CFString const*, __CFURLCacheNode*, bool) + 102
38  CFNetwork                       0x31a4d652 __CFURLCache::CreateAndStoreCacheNode(__CFURLCacheNode*, _CFCachedURLResponse const*, __CFString const*, _CFURLRequest const*, void const*, bool, bool&) + 186
39  CFNetwork                       0x31a900c8 __CFURLCache::AddCacheTask0(__CFURLCacheNode*) + 320
40  CFNetwork                       0x31a8ff78 __CFURLCache::AddCacheTask(__CFURLCacheNode*) + 28
41  CFNetwork                       0x31a4d55e CFURLCacheAddCachedResponseForRequest + 622
42  CFNetwork                       0x31ac7ac4 ___internalEvent_WillCacheResponse_block_invoke_0 + 28
43  CFNetwork                       0x31ac91ca URLConnectionClient_Classic::_delegate_willCacheResponse(_CFCachedURLResponse const*, void ()(_CFCachedURLResponse const*) block_pointer) + 42
44  CFNetwork                       0x31ac7a96 URLConnectionClient::_internalEvent_WillCacheResponse() + 586
45  CFNetwork                       0x31ac7b8c URLConnectionClient::_clientEvent_DidFinishLoading() + 172
46  CFNetwork                       0x31acdaa8 ___withClientAsync_block_invoke_0 + 20
47  CFNetwork                       0x31ac6426 ___withWorkQueueAsync_block_invoke_0 + 10
48  CFNetwork                       0x31af0e34 ___performAsync_block_invoke_0 + 24
49  libdispatch.dylib               0x39ea911c _dispatch_call_block_and_release + 8
50  libdispatch.dylib               0x39ea8996 _dispatch_queue_drain$VARIANT$up + 142
51  libdispatch.dylib               0x39ea8890 _dispatch_queue_invoke$VARIANT$up + 32
52  libdispatch.dylib               0x39eb7212 _dispatch_root_queue_drain + 190
53  libdispatch.dylib               0x39eb73b4 _dispatch_worker_thread2 + 80
54  libsystem_c.dylib               0x39edda0e _pthread_wqthread + 358
55  libsystem_c.dylib               0x39edd8a0 start_wqthread + 4`

有人见过像这样的崩溃吗?涉及到GMSMapView或Google Maps SDK的问题。

如果它是你的线程,你能展示给我们你在那个线程中做了什么吗?我写的代码也遇到了类似的崩溃问题,问题出在于我将一个块发布到全局并发队列中;该块创建了一个新的 Core Data 管理对象上下文,执行了一堆操作并退出。由于某些托管对象可以在自动释放池中存活而超过了该上下文的生命周期,导致了崩溃 — 我假设作为返回结果提供了一个自动释放池。因此,解决方案是在创建上下文和显式销毁之间的所有内容中使用 @autoreleasepool - Tommy
这个线程不是我的。我猜测这是谷歌地图在检索或更新瓦片。 - eric.mitchell
1个回答

0

我曾经在 Xcode 5 - DP 5 和之前版本的 Google Maps SDK 中遇到过这个问题。我升级了 SDK,问题似乎就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接