0

MKAnnotationsが追加されたMKMapViewを持つGPSTestViewControllerクラスがあります(Basesというクラスに格納されています)。ベースがマップ上を移動するように、MKAnnotationsの座標を(BasesのupdateBaseInformationメソッドを使用して)継続的に更新しようとしています。更新は、GPSTestViewControllerメソッドlocationUpdateから呼び出されます(毎秒呼び出されるため)。

- (void)locationUpdate:(CLLocation *)location {
    NSLog(@"locationUpdate");
    self.cachedLocation = location;
    [self centerTo:cachedLocation.coordinate];
    //Trying to update the coordinates every second
    [bases updateBaseInformation];   <--Program received signal: “EXC_BAD_ACCESS”
    return;
}

しかし、次のメッセージが表示されます。[bases updateBaseInformation]; プログラム受信信号:「EXC_BAD_ACCESS」</ p>

Bases.mには、次のコードが含まれています(一部のコードがコメント化されている場合でも、クラッシュします)。

- (void)updateBaseInformation {
   NSLog(@"Updating base information");
   for(MyAnnotation *a in bases)
   {
       //CLLocationCoordinate2D c;
       if([a.type compare:@"friend"] == 0)
       {
           //c.latitude = a.coordinate.latitude+0.001;
           //c.longitude = a.coordinate.longitude+0.001;
           //a.coordinate = c;
       }
       else if([a.type compare:@"enemy"] == 0)
       {
       //[a setCoordinate:CLLocationCoordinate2DMake(a.coordinate.latitude+0.002, a.coordinate.longitude+0.0012)];
       }
   }

}

私の推測では、すでにどこかでアクセスされているオブジェクトにアクセスしているため、EXC_BAD_ACCESSが発生します。私は検索に何時間も費やしましたが、結果はありませんでした。なぜこのエラーが発生するのですか?注釈をマップ上で移動させるにはどうすればよいですか?

プロジェクト全体をにアップロードしました(リンクが削除されました)。

解決策 これで問題は解決しました。問題は、注釈を保持する配列が自動解放されたことでした。だから私は割り当てをから変更しました

bases=[NSMutableArray配列];

bases=[[NSMutableArray配列]保持];

前もって感謝します。

4

1 に答える 1

0

私の推測では、すでにどこかでアクセスされているオブジェクトにアクセスしていると思います

メモリに存在しなくなったオブジェクトにアクセスしている可能性があります-後でアクセスするオブジェクトの割り当てを解除していないことを確認する必要があります。スキームでゾンビをオンにする必要があります。これにより、オブジェクトの割り当てが解除された後、オブジェクトのメモリを効果的に監視することで、割り当てが解除されたオブジェクトにアクセスしていることを確認できます。ここでそれらをオンに切り替えることができます:スキーム/スキームの編集/ゾンビオブジェクトの有効化。

于 2012-01-24T21:01:54.193 に答える