我无法在我的应用程序中找到错误,因为它仅在临时安装后才出现。我已将其范围缩小为[self.mapview removeOverlay:overlay];
'[self.mapview addOverlay:overlay]。如果我通过 Xcode (4.6.1) 安装和调试,具有完全相同步骤的完全相同的代码可以在几分钟前工作。我不会在测试之间更改任何其他设置。我只是存档并分发应用程序,或者我按下运行按钮并将其推送到我的 iPad。一次有效,一次失败。
Xcode->device = 覆盖可以随心所欲 Xcode->adhoc->server->device = 当我尝试删除可见覆盖或添加地图现在可以看到的区域内的覆盖时,应用完全冻结
我查看了设备上的崩溃日志,它总是在 [MKOverlayClusterView didAddSubview:] 或 [MKOverlayClusterView willRemoveSubview:]
这是崩溃日志中显示的主线程
0 libsystem_kernel.dylib 0x3c4ff27c __psynch_rw_wrlock + 24
1 libsystem_c.dylib 0x3c44fbd6 pthread_rwlock_wrlock + 334
2 MapKit 0x34fb321e -[MKOverlayClusterView willRemoveSubview:] + 50
3 UIKit 0x3614b2d2 __UIViewWillBeRemovedFromSuperview + 126
4 UIKit 0x35f93844 -[UIView(Hierarchy) removeFromSuperview] + 52
5 MapKit 0x34fae5b0 -[MKOverlayContainerView _removeOverlayView:forOverlay:coalesce:] + 24
6 MapKit 0x34fae118 -[MKOverlayContainerView removeOverlays:] + 240
值得注意的是,在两个添加/删除变体中,堆栈的最后一个顶部是相同的,所以这可能是 pthread_rwlock_wrlock 的问题,这意味着我在某些时候已经越过了线程。我试图通过使用 [self performSelectorOnMainThread:@selector(mainThreadRemoveOverlays:) withObject:@[overlay] waitUntilDone:YES]; 但是当通过 adhoc 方法安装应用程序时崩溃一直发生,并且在通过 Xcode 调试时永远不会发生。