IOS 6 и службы определения местоположения не работают

Я обновил my iOS SDK до версии 6. После этого я скомпилировал свое приложение (отлично работает в iOS 4 & iOS 5), но теперь службы определения местоположения не работают. Мой delegate не получает никакого обновления, а стрелка верхнего положения не появляется... Я запускаю службу обычным способом:

[locationManager startUpdatingLocation];

Мой проект не ARC.

Что происходит? Это сводит меня с ума...

Спасибо заранее.

Ответ 1

Убедитесь, что в файле проекта .plist есть имя CFBundleDisplayName. Добавление этого ключа фиксировало это для меня.

Ответ 2

Просто установите для свойства pausesLocationUpdatesAutomatically диспетчера местоположений значение NO. Это новая функция IOS 6, которая отключает обновления местоположения при запуске приложения в фоновом режиме. Значением по умолчанию этого свойства является YES.

Ответ 3

Это изменение в iOS6:

Вам нужно реализовать locationManager: didUpdateLocations: вместо locationManager: didUpdateToLocation: fromLocation, чтобы получать уведомление о обновлении местоположения.

Вы также должны прочитать документацию startUpdatingLocation.

Ответ 4

В моем случае у меня был менеджер местоположений в другом классе, и я вызывал этот класс с основного контроллера. Это не сработало, и didUpdateLocations не был вызван.

//
//  LocationServices.h
// 

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface LocationServices : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;

}

@property (nonatomic, retain) CLLocationManager *locationManager;

- (void)startLocationServices;

@end



//  LocationServices.m
#import "LocationServices.h"

@implementation LocationServices 
@synthesize locationManager, currentLocation;

- (void)startLocationServices {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;

    if ([CLLocationManager locationServicesEnabled]) {
        [locationManager startUpdatingLocation];

    } else {
        NSLog(@"Location services is not enabled");
    }
}

////////////////////////////////////////////////
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations {
    CLLocation* location = [locations lastObject];
    NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
}
@end

// Main controller
- (void)viewDidLoad {   
    [super viewDidLoad];

.....

LocationServices *locationSerices = [[LocationServices alloc]init];
[locationSerices startLocationServices];
......
}

Приведенный выше код не работает. Зачем? Я не знаю... вы можете легко потерять интерес, когда тратите столько времени, пытаясь сделать то, что должно быть простым. iOS - очень сложная и недружественная среда программирования. Есть много способов сделать одно, только одно работает, вы не можете смешивать и сопоставлять, не вводя проблему. Вы должны делать все по книге, или вы или ничего не получаете. Даже не намек на то, что вы сделали что-то не так... разочарование...

Вместо этого, когда я реализовал locationManager: (CLLocationManager *) manager didUpdateLocations: в главном контроллере все работало нормально

Ответ 6

настройка CFBundleDisplayName решила проблему для меня. То же самое обновление местоположения никогда не вызывалось, просто установите параметр info.plist и он начнет работать.

Ответ 7

Я пробовал все в файлах plist, чистил, перестраивал, новые цели, конфигурации и т.д. и т.д. и т.д. Ничего не работало. Но НАКОНЕЦ Я исправил это. Мне пришлось создать новый проект Xcode 4.5 с нуля, перенастроить его, вручную добавить файл по файлу и структуре. Похоже, что мой старый проект XCode имел что-то внутренне несовместимое с последним XCode. Я пишу это здесь, потому что, возможно, это может спасти кого-то в течение следующих 10 часов работы.

Ответ 8

Я слишком упрощен здесь? В разделе "Конфиденциальность" местоположения выглядят так же, как в предыдущих выпусках. Что все беспокоит?