В четвертой строке вашего кода начинается проблема. Вы не можете получить местоположение мгновенно, вам нужно будет подождать, пока службы определения местоположения не уведомят делегата о том, что местоположение доступно. Я добавлю несколько комментариев к вашему коду, чтобы объяснить:
-(void)showDirections
{
locationManager = [[CLLocationManager alloc] init];
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager setDelegate:self];
// this is not where you should be looking
CLLocation *location = [locationManager location];
// the rest of this function is not included in this example ...
}
Поскольку вы устанавливаете делегата как "self", текущий класс, но реализует протокол " CLLocationManagerDelegate ", который определяет следующие две функции:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { /* */ }
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { /* */ }
Именно здесь вы получите предоставленное вам местоположение.
Не забудьте обновить определение класса следующим образом:
@interface MyClass : NSObject <CLLocationManagerDelegate> {
И, как примечание, кажется, что вы не до конца понимаете делегатов и цели, которые они выполняют, что хорошо, если вы новичок в Objective-C, но знакомство с ними, безусловно, сделает вашу жизнь немного легче.
Некоторые другие полезные вещи: