У меня есть класс GPSTestViewController, в котором есть MKMapView с добавленными примечаниями MKA (хранятся в классе, называемом Bases). Я пытаюсь постоянно обновлять координаты для MKAnnotations (с помощью метода updateBaseInformation в Bases), чтобы базы двигались на карте. Обновление вызывается из метода locationUpdate метода GPSTestViewController (поскольку он вызывается каждую секунду):
- (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;
}
Но тогда я получаю следующее сообщение:
[base updateBaseInformation]; Программа получила сигнал: «EXC_BAD_ACCESS»
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. Я потратил много часов на поиск, но безрезультатно. Почему я получаю эту ошибку и как мне сделать, чтобы аннотации перемещались по карте?
Я загрузил весь проект в (ссылка удалена).
Решение
Проблема сейчас решена. Проблема заключалась в том, что массив, содержащий аннотации, был автоматически выпущен. Поэтому я изменил распределение с
base = [NSMutableArray array];
до
base = [[NSMutableArray array] retain];
Заранее спасибо.