2014-11-04 3 views
1

Я хочу спросить местоположение пользователя только один раз из-за запуска приложения. Я имею в виду, каждый раз, когда пользователь запускает приложение, попросите его службу определения местоположения (только один раз).Начало службы определения местоположения с dispatch_once

Я думал об этом с dispatch_once.

static dispatch_once_t oncePredicate; 

dispatch_once(&oncePredicate, ^{ 

    [self.locationManager startUpdatingLocation]; 
}); 

Это лучший способ сделать это? Или есть лучший способ?

Заранее благодарен!

+1

Где этот код? Почему вы обеспокоены тем, что он может работать несколько раз, и каков был бы побочный эффект, если бы это произошло? – Wain

+0

Спасибо @Wain, этот код на месте, который может произойти несколько раз. И я не волнуюсь, я спрашиваю о лучшей практике ... Побочным эффектом должен быть вопрос местоположения для пользователя (и я знаю, что он спрашивает только один раз, но время вопроса имеет значение для меня) – gran33

ответ

1

Как правило, вам не нужно беспокоиться о вызове startUpdatingLocation несколько раз. Вместо этого вы должны добавить логику, чтобы убедиться, что она вызывается только в случае необходимости - то есть после того, как она становится значимой для пользователя.

Как правило, это означает сохранение некоторого состояния, возможно, по умолчанию пользователя, и проверку этого состояния перед вызовом startUpdatingLocation. В частности, состояние будет установлено только после того, как пользователь достигнет определенной стадии вашего приложения, когда разумно спросить их о разрешении (и что они одобрили, хотя эта проверка должна быть сделана чаще, поскольку позже они могут отказаться от отзыва auth).

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