iOS: почему при запуске отображается предупреждение «Включить службы определения местоположения»? - PullRequest
2 голосов
/ 23 января 2012

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

Когда второе оповещение отменено, первое оповещение все еще там.

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

Что я могу сделать, чтобы показать его только один раз, со свойством предназначения?

1 Ответ

0 голосов
/ 23 января 2012

В моем делегате приложения были созданы как объект контроллера карты, так и объект менеджера местоположения.

mapController = [[[MapController alloc] initWithFrame:CGRectMake(0, 0, 0, 0)] retain];
[self restartLocationManager];

Однако свойство цели диспетчера местоположений не устанавливается до тех пор, пока в этом коде не будет создан экземпляр диспетчера местоположений:

- (void) restartLocationManager {
    if (locationManager)
        [locationManager release];

    locationManager = [[[CLLocationManager alloc] init] retain];
    locationManager.purpose = NSLocalizedString(@"Location Service Purpose", nil);
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    [locationManager startUpdatingLocation];
}

Так что это был ключ к тому, что что-то в инициализации карты вызывало первое предупреждение.

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

- (id) initWithFrame:(CGRect)aFrame {
    @synchronized(self) {
        if (!theMap) {
            if (!self) self = [super init];

            theMap = [[[MKMapView alloc] initWithFrame:aFrame] retain];
            theMap.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            theMap.showsUserLocation = YES;
            theMap.delegate = self;
    }
    return self; 

}

Проходя по коду, я увидел второе предупреждение, отображаемое при выполнении строки showUserLocation. Мне придется немного больше тестировать, чтобы точно сузить его, но я думаю, что сейчас на правильном пути.

...