Приложение падает при доступе к CLLocation - PullRequest
1 голос
/ 27 мая 2011

У меня есть CLLocation, который я установил для текущего местоположения в рамках следующей функции

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation{

currentLocation = newLocation;
}

Когда я пытаюсь получить доступ к текущей позиции более поздним методом, приложение вылетает.

NSLog(@"current latitude is %f", currentLocation.coordinate.latitude);
NSString *longitude = [NSString stringWithFormat:@"%g", currentLocation.coordinate.longitude];
NSString *latitude =  [NSString stringWithFormat:@"%g", currentLocation.coordinate.latitude];

Текущая позиция устанавливается в первом методе. Я могу распечатать его, что странно, что у меня есть currentLocation, определенный как указатель в заголовке.

Приложение аварийно завершает работу и отсутствует трассировка стека. Отладчик просто отправляет меня в retValue моего приложения.

Я пытался сохранить указатель, а также alloc до установки его в newLocation, но, похоже, ничего не работает.

Чего мне не хватает: D

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

Я не очень уверен в вашем коде, но могу предложить это

Я пытался сохранить указатель, а также alloc до установки его в newLocation, но, похоже, ничего не работает.

Перед настройкой необходимо сохранить указатель newLocation, а не currentLocation.

currentLocation = [newLocation retain];

или

self.currentLocation = newLocation;

Поскольку ваше назначение currentLocation = newLocation; не сохраняет указатель иnewLocation - это автоматический выпуск.

1 голос
/ 27 мая 2011

Приложение аварийно завершает работу и отсутствует трассировка стека.Отладчик просто отправляет меня в retValue моего приложения.

Используете ли вы Xcode 4?У многих людей возникают проблемы с новым интерфейсом.В нижней части окна трассировки стека есть ползунок, если он установлен как «грубый», он будет показывать только блок main () приложения.

Как указано в комментариях выше, я считаю, что вы должныговоря self.currentLocation вместо currentLocation.Разница в том, что когда вы просто говорите currentLocation, вы только назначаете указатель.Чтобы получить все «волшебные» функции, которые вы определили в заголовочном файле (retain, et al), вам нужно использовать обозначение self.currentLocation, OR, [self setCurrentLocation:newLocation];.Функционально это одно и то же, это вопрос стиля.

...