CoreLocation дает сбой на устройстве, но не на симуляторе - PullRequest
1 голос
/ 11 сентября 2010

Продолжайте получать EXC_BAD_ACCESS.Запустил NSZombieEnabled и ничего не придумал.

В консоли симулятора:

 2010-09-11 23:39:56.876 [19072:207] 1.309789, lat, 103.772196, lon

В консоли устройства:

EXC_BAD_ACCESS

Строка кода:

 NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString);

Что делает CLManager:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
 NSLog(@"Entering mlocationmanager did updatetolocation");
    latitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];

    longitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];

  NSLog(@"lat %@ long %@", latitudeString, longitudeString);
 NSLog(@"%@",newLocation.description);
 if (latitudeString.length >0 && longitudeString.length > 0){
  NSLog(@"Yes both are more than 0");
  locationIsReady = YES;

 }
 [self.tableView reloadData]; 
}

Что здесь происходит?Обе переменные находятся в моем заголовочном файле, и CLLocationManagerDelegate соответствует.Работал над этим несколько часов, но не повезло.Надеюсь, вы, ребята, можете помочь.

NSString *latitudeString;
 NSString *longitudeString;

Ответы [ 3 ]

2 голосов
/ 11 сентября 2010

Вам действительно не нужно конвертировать newLocation.coordinate.longitude в NSString, чтобы распечатать его.Просто используйте %f в строке формата для их печати. ​​

Кроме того, когда вы пишете:

if (latitudeString.length >0 && longitudeString.length > 0)

Вы сравниваете длину строк, которые всегда будет больше нуля.BEcause, если долгота или широта равны нулю, преобразованная строка будет @"0.0", которая имеет длину 3.Я подозреваю, что вы действительно хотите здесь:

if (newLocation.coordinate.latitude != 0.0
    && newLocation.coordinate.longitude != 0.0)
1 голос
/ 11 сентября 2010

Наконец-то исправил это через долгое время.

Мне потребовалось некоторое время, чтобы понять, что NSXMLParser фактически переопределяет некоторые из моих переменных (я понятия не имею, почему).Итак, в конце я вызвал CLLocationManager после того, как мой XML был разобран.Проблема решена.

1 голос
/ 11 сентября 2010

Строка кода действительно должна быть вашим виновником:

NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString);

Правильный аргумент формата NSLog для объектов Objective C: %@. %f для чисел с плавающей точкой.

...