Чому requestWhenInUseAuthorization не пропонує користувачеві доступ до цього місця?


74

У своєму viewDidLoadметоді я маю

locationManager = [[CLLocationManager alloc]init]; // initializing locationManager
locationManager.delegate = self; // we set the delegate of locationManager to self.
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];


if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    [locationManager requestWhenInUseAuthorization];
}

І запит викликається, але користувачеві не пропонується? Чому?


Також не рекомендується перевіряти версію ОС так, як ви робите. Краще використовуватиif([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization:)])
Джай Говіндані

Відповіді:


281

Ймовірно, вам потрібно оновити plistфайл. Ось підручник, як це зробити , швидко та брудно:

Вам потрібно додати один із таких ключів до вашого файлу Info.plist:

NSLocationWhenInUseUsageDescription

NSLocationAlwaysUsageDescription

Вам також потрібно запитати авторизацію для відповідного методу розташування, WhenInUseабо Background. Скористайтеся одним із таких дзвінків:

[self.locationManager requestWhenInUseAuthorization]
[self.locationManager requestAlwaysAuthorization]

Є також допис, який я знайшов корисним:

Служби локації не працюють в iOS 8

Ця відповідь описує, як оновити plistфайл :

Додайте один із наступних рядків до свого списку info.plist

<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>

Ймовірно, вам доведеться налаштувати та перевірити орфограму рядки словникового запису, який міститься у файлі info.plist, перед тим, як відправляти код .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.