2013-10-26 4 views
2

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

Мой код, который я использовал:

CLLocationManager *locationManager; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[locationManager startUpdatingLocation]; 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[locationManager startUpdatingLocation]; 
float latitude = locationManager.location.coordinate.latitude; 
float longitude = locationManager.location.coordinate.longitude; 
NSLog(@"%.8f",latitude); 
NSLog(@"%.8f",longitude); 

NSLog печатает 0.0000000 для обеих координат.

Спасибо!

+0

Я сделал UILabels и установить тексты соответственно с координатами, но по-прежнему имеет ту же ошибку временного UIalert и координата еще 0,000000 – user2402616

ответ

7

Причины вы получаете 0 потому, что менеджер места не собрал какие-либо данных в этой точке (она начала мысль)

Вы должны установить свой класс в качестве делегата от менеджера местоположения (т.е. предоставляя функцию, которая вызывается всякий раз, когда извлекается новое местоположение), а также сохраняйте свой менеджер местоположений.

// Inside .m file 

@interface MyClass() <CLLocationManagerDelegate> // Declare this class to implement protocol CLLocationManagerDelegate 

@property (strong, nonatomic) CLLocationManager* locationManager; // Retains it with strong keyword 

@end 

@implementation MyClass 

// Inside some method 

    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locationManager.distanceFilter = kCLDistanceFilterNone; 
    [self.locationManager startUpdatingLocation]; 

// Delegate method 
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    CLLocation* loc = [locations lastObject]; // locations is guaranteed to have at least one object 
    float latitude = loc.coordinate.latitude; 
    float longitude = loc.coordinate.longitude; 
    NSLog(@"%.8f",latitude); 
    NSLog(@"%.8f",longitude); 
} 
+0

Это работает, но я получаю три пары координат вместо одного. Я реализую все «я». «Параметры в viewDidLoad. Не уверен, что это имеет значение. Есть идеи? Кроме того, когда я перезаряжаю экран, он печатает одну пару по желанию. – user2402616

+1

Массивы должны были содержать местоположения, которые ваше приложение каким-то образом «пропустило» (не уверен, что это означает, может быть, когда приложение было занято или в фоновом режиме). Часто последнего достаточно, но все зависит от того, какое приложение вы делаете. Если, скажем, вы пытаетесь записать, где пользователь * был (история движения), вы можете прочитать весь массив. –

+0

Я сделал некоторую отладку, и, похоже, функция locationManager вызывается несколько раз. Как это обойти? – user2402616

Смежные вопросы