Как постоянно обновлять координаты MKAnnotation на MKMap - PullRequest
0 голосов
/ 25 января 2012

У меня есть класс 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];

Заранее спасибо.

1 Ответ

0 голосов
/ 25 января 2012

Я предполагаю, что я получаю доступ к объектам, к которым уже обращались где-то еще

Вы, вероятно, обращаетесь к объекту, которого больше нет в памяти - вам нужно проверить, не освобождаете ли вы объект, к которому вы впоследствии обращаетесь. Вы должны включить Зомби для своей схемы, которая позволит вам видеть, когда вы обращаетесь к освобожденному объекту, эффективно следя за памятью объекта после того, как объект был освобожден. Вы можете включить их здесь: Схема / Редактировать схему / Включить объекты зомби.

...