6

私のアプリケーションは iOS6 では正常に動作していましたが、MKMapView にオーバーレイを追加すると、アクセスが悪いために iOS 7 でクラッシュします。私のコードは次のとおりです。

MKPolyline *polyline = [[MKPolyline alloc] init];
   polyline = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
    [directionMap addOverlay:polyline];

ここに画像の説明を入力

これはクラッシュ ログ (lldb) です bt *

 thread #51: tid = 0x1cc5, 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8
    frame #1: 0x3598dbc8 VectorKit`-[VKRasterOverlayTileSource init] + 176
    frame #2: 0x358cfd24 VectorKit`-[VKMapModel _rasterOverlayTileSourceForLevel:] + 308
    frame #3: 0x358d0226 VectorKit`-[VKMapModel addRasterOverlay:] + 46
    frame #4: 0x2f068dfe MapKit`-[MKOverlayContainerView _insertDrawable:forOverlay:atIndex:level:] + 1010
    frame #5: 0x2f06752e MapKit`-[MKOverlayContainerView _configureAndAddDrawable:forOverlay:level:] + 326
    frame #6: 0x2f0676ac MapKit`-[MKOverlayContainerView _considerAddingDrawable:inAddRect:level:] + 372
    frame #7: 0x2f067cce MapKit`-[MKOverlayContainerView addOverlay:level:] + 246
    frame #8: 0x001394c8 Falcon`-[GetDirectionVC showRouteFrom:to:](self=0x19742820, _cmd=0x001fa466, f=CLLocationCoordinate2D at 0x04f9ec2c, t=CLLocationCoordinate2D at 0x04f9ec1c) + 956 at GetDirectionVC.m:226
    frame #9: 0x001390ee Falcon`-[GetDirectionVC loadLocations](self=0x19742820, _cmd=0x001fa458) + 1314 at GetDirectionVC.m:173
    frame #10: 0x2e876e26 Foundation`__NSThread__main__ + 1062
    frame #11: 0x38891c1c libsystem_pthread.dylib`_pthread_body + 140
    frame #12: 0x38891b8e libsystem_pthread.dylib`_pthread_start + 102

(lldb)

4

2 に答える 2

18

私は同じ問題を抱えていました.スタックトレースは誤解を招くように見えます. 私のバグ修正は、メイン スレッドにオーバーレイを明示的に追加することです。

dispatch_async(dispatch_get_main_queue(), ^{
  [mapView addOverlay:myRouteLine];
});

または、新しい MKOverlayRenderer を使用したい場合:

dispatch_async(dispatch_get_main_queue(), ^{
  [mapView addOverlay:myRouteLine level:MKOverlayLevelAboveRoads];
});

私の場合、いくつかのデータを非同期にダウンロードし、ポリラインを生成し、MKOverlayViews / MKOverlayRenderes を作成し (非推奨のコードを置き換えるのに役立ちませんでした)、オーバーレイをマップに追加します。

于 2013-09-26T19:32:52.070 に答える
1

メイン スレッド以外のスレッドでポリ ラインを作成する場合は、次を使用します。

[self performSelectorOnMainThread:@selector(addPolyLineToMap:) withObject:polyline waitUntilDone:NO];

-(void)addPolyLineToMap:(MKPolyline*)apolyline{
    [mapview addOverlay:apolyline];
}
于 2013-10-01T20:22:01.260 に答える