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配列]保持];
前もって感謝します。