2011-11-05 26 views
9

いくつかのオーバーレイを表示するアプリをビルドしました。オーバーレイは、外側リングに10000ポイントまでのポリゴンの形式です。しかし、ここで問題点は少ないようです。ここ数日、私はMapViewを含む単純なViewで自分自身を見つけるためにアプリを単純化し続けました。ビューはxibからロードされます(アウトレットとデリゲートが接続されています)。オーバーレイはメソッド内に作成されます。 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)はアニメーション化され、mapViewに追加されます。iOS 5 MapKitがズーム/パン時にオーバーレイでクラッシュする

デモンストレーション(ここではhttps://github.com/nebucaz/mapkitにあります)では、MapViewが表示され、地図がズームイン/アウトまたはパンされるたびに赤い三角形が追加されます。 MapViewをズームしたりパンしたり(集中的かつ高速)にすると、アプリがクラッシュします。シミュレータをチャールズするのは簡単ですが、デバイス上では可能ですが(クラッシュログを提供することは可能ですが)、はるかに難しいです。

MapCrashとMapCrashStaticという2つのデモがあります。 1つ目は、パン/ズームの位置に応じてマップの周りに複数のポリゴンを作成します。第二は、のみで作成された単一の、静的なポリゴンがある - (無効)のviewDidLoadをして、アプリケーションは常に次のバックトレースでクラッシュのMapView regionDidChangeAnimatedのすべての呼び出し

に追加されます。

Attaching to process 8745. 
MapCrash(8745) malloc: protecting edges 
[Switching to process 8745 thread 0x1820b] 
[Switching to process 8745 thread 0x1820b] 
(gdb) backtrace 
#0 0x00000000 in ??() 
#1 0x00e81a60 in CG::Path::apply_transform() 
#2 0x00ed741c in CGPathCreateMutableCopyByTransformingPath() 
#3 0x00f50d23 in CGContextAddPath() 
#4 0x000f11dc in MKRoadWidthAtZoomScale() 
#5 0x000ee498 in MKMapRectRemainder() 
#6 0x000fab01 in MKTilesRequireGoogleLegalNotices() 
#7 0x02723c17 in -[CALayer drawInContext:]() 
#8 0x027407e3 in tiled_layer_render() 
#9 0x0265b127 in CAImageProviderThread() 
#10 0x01eb04e6 in _dispatch_worker_thread2() 
#11 0x98f44b24 in _pthread_wqthread() 
#12 0x98f466fe in start_wqthread() 
(gdb) 

バックトレースされます常に同じですが、ライブラリコードの同じポイントでクラッシュします。私は楽器(ゾンビ、リーク、アロケーション)を分析し、過剰に保持されたオブジェクトでいくつかのテストを行いました。私はそれが記憶上の問題であると想定しましたが、私はまだMalloc Guardを起動できませんでした。クラッシュは複数のマシン上で再現される可能性があります。私はXcodeツールを再インストールしただけです。

MapKitの突然のクラッシュにも関わらず、私の問題に直接的な解決策はありません。また、代理人やその他のビューの移行やアプリケーションの開始/停止の問題に対処しなければなりません。 ARCは私のプロジェクトではオフです。私はまだ私はKMLViewerデモを誤解と仮定して、今一週間以上もこのクラッシュを狩る

+2

ちょうど私の価値の数セントでチャイムするには、私は現在、まったく同じ問題を抱えています。私は、MKOverlayプロトコルをサポートするオブジェクトのリストを含むNSMutableArrayを持っています。可変配列内のオブジェクトが削除されると、マップビューからも削除されます。しかし、繰り返しズームすると、次のスタックトレースが発生します。 – Diziet

+1

'アドレス0x1のメモリにアクセスできない (gdb) #0 0x00000001 in ?? () #CGPathCreateMutableCopyByTransformingPath()で1 0x011a741c #CGContextAddPath() #2 0x01220d23 MKMapRectRemainder() #3 0x003be3e1 MKMapRectRemainder() #MKTilesRequireGoogleLegalNotices 5 0x003cab01() #6 0x029f3c17で4 0x003be498 - [CALayerのdrawInContext:() #tiled_layer_render 7 0x02a107e3() #CAImageProviderThread() #8 0x0292b127 _dispatch_worker_thread2 9 0x021804e6() _pthread_wqthread位10 0x9c981b24()start_wqthreadで #11 0x9c9836fe() ' – Diziet

+2

おかげ@ Dizietを共有する。私は先週Apple Developer NetworkでTSIを開き、バグを提出するように求められました。私はこの時点で利用可能な回避策はなく、バグが調査されると言われました。私は進捗状況についてのさらなるコメントを投稿します。 – Snel

答えて

3

あなたはおそらくすでにこのことについて考えたが、私はすべてのデリゲートをnilに-INGのない端を発するMapKitから多数の異なる-探しクラッシャーズを見てきました。マップビューのデリゲートを解放する前にnilに設定してください。

さらに、performSelector:afterDelay:をマップビューで使用する傾向のある多くの開発者があります。これは正しい場所にcancelperformコールを入れても大丈夫です。

+0

タンク@Davidあなたの考えを共有する。私の例では、リリース前にmapViewのデリゲートをnilに設定していました。私はこれについて考えたことはありません。なぜなら、使用中に地図がクラッシュし、地図を描くからです。このサンプルを 'self.theMapView.delegate = nil;で更新しました。 [self.theMapViewリリース]; self.theMapView = nil; 'サンプルコードは決して' performSelector'を行いません。今のところ、クラッシュは続く。 – Snel

0

zoomToPolyLineメソッドを削除し、mapViewDidUpdateLocationを使用してポリラインをズームします。

関連する問題