アドホック インストール後にのみ現れるため、アプリのバグを見つけるのに苦労しています。[self.mapview removeOverlay:overlay];
「[self.mapview addOverlay:overlay]」に絞り込みました。Xcode(4.6.1)を介してインストールおよびデバッグすると、まったく同じ手順のまったく同じコードが数分前に機能します。テスト間で他の設定を変更していません。アプリをアーカイブして配布するか、[実行] ボタンを押して iPad にプッシュします。1 回は機能し、1 回は失敗します。
Xcode->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]; を使用して、これを防止しようとしました。ただし、アドホック メソッドを使用してアプリをインストールするとクラッシュが発生し続け、Xcode を使用してデバッグする場合は発生しません。