0

アドホック インストール後にのみ現れるため、アプリのバグを見つけるのに苦労しています。[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 を使用してデバッグする場合は発生しません。

4

1 に答える 1

0

同様の問題がありました。マップ オーバーレイをマップに追加していました。テスト時には正常に機能しましたが、アドホック展開では機能しませんでした。私の解決策は、間違ったケースを入れたことでした。ファイル名が実際には Map.jpeg であるのに、map.jpeg を使用していました。

マップ.jpeg != マップ.jpeg

マップがテストに取り組んでいたので、それが正しい名前だと思いました。これが問題であることを知るのにしばらく時間がかかりました。iPhone 5 またはシミュレーターがこれを検出しなかった理由がわかりません。

また、デプロイする前にプロジェクトをクリーンアップすることをお勧めします。

お役に立てれば

于 2013-04-18T10:44:49.220 に答える