3

このクラッシュの原因を突き止めるのに苦労しています。

同じ画面に MapView と Tableview を持つ iPad アプリケーションがあります。ユーザーがテーブル内の行を選択して、マップ内の対応するピンを強調表示できるようにしようとしています。シミュレーターでは正常に動作します。デバイスではしばらくは動作しますが、それを続けると SIGSEGV でクラッシュします。理由がわかりません。

選択したテーブルビューの行からマップビューでピンを選択する場合にのみ発生するようです。

ここにコードがあります

  Place *p = [self.results objectAtIndex:[indexPath row]];

NSArray *annon = [self.mapView annotations];
for ( int i = 0; i < [annon count]; i++)
{
      NSObject *a = [annon objectAtIndex:i];
      if ([a isKindOfClass:PlaceAnnotation.class])
      {
           PlaceAnnotation *pa = (PlaceAnnotation *)a;
           if (p.placeid == pa.placeid)
           {  
                [self.mapView selectAnnotation:pa animated:YES];
                break;
           }
      }
}

このコードを実行した結果として発生するクラッシュの種類を次に示します。

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x9
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                     0x317c4f78 0x317c1000 + 16248
1   CoreFoundation                      0x3195576b 0x318c6000 + 587627
2   CoreFoundation                      0x318cd644 0x318c6000 + 30276
3   CoreFoundation                      0x318cf701 0x318c6000 + 38657
4   MapKit                              0x36b061f3 0x36ab9000 + 315891
5   MapKit                              0x36acf33d 0x36ab9000 + 90941
6   MapKit                              0x36acf2f1 0x36ab9000 + 90865
7   MapKit                              0x36ad29bd 0x36ab9000 + 104893
8   MapKit                              0x36acdf03 0x36ab9000 + 85763

どんな助けでも大歓迎です。

4

1 に答える 1

0

クラッシュの原因は、正確な位置が見つかるとすぐに表示される現在地バブルのせいだと思います。次を使用してユーザーの場所を無効にしてみてください

[self.mapView setShowsUserLocation:NO];

ユーザーの位置情報が必要な場合は、次のデリゲート メソッドを含めて、アプリがクラッシュするかどうかを確認します。

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation {
if(![annotation isKindOfClass:[PlaceAnnotation class]]) {
    return nil;
}

}

ありがとう。

于 2013-02-26T12:12:29.107 に答える