Я пытаюсь использовать местоположение пользователя в своем приложении для iOS. Приложение работает на iOS 7, но не работает на iOS 8.
Я пробовал все это. Прочитал кучу туториалов и знаю, что в iOS 8 нужно вызвать метод requestWhenInUseAuthorization и добавить ключ NSLocationWhenInUseUsageDescription в Info.plist.
Но он все еще не работает, он не спрашивает разрешения пользователя, я тестирую на реальном устройстве (iPhone 5c под управлением iOS 8.1.x). Я пытался переустановить приложение много раз.
Это коды очень-очень небольшого проекта, который я создал для проверки этой штуки.
Мой ViewController.m
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLHeadingFilterNone;
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
NSLog(@"Pôde chamar o método"); // It could call the method
[self.locationManager requestWhenInUseAuthorization];
}
// [self.locationManager startUpdatingLocation];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@"Atualizou Localização para: %@", [locations lastObject]); // Updated the location to
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"Location Manager falhou com erro: %@", error); // Location manager failed with error
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorized) {
[self.locationManager startUpdatingLocation];
}
}
@end
Моя информация.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>wallace.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
</dict>
</plist>
Кто-то знает, как это выяснить?
if
, где вы запрашиваете авторизацию и регистрируете Pôde chamar o método? И когда вы говорите, что он не работает, вы имеете в виду, что он никогда не запрашивает авторизацию? Или он не отслеживает местоположение должным образом? Если он просто не запрашивает пользователя, проверьте приложение настроек, чтобы убедиться, что оно еще не авторизовано и что ваши службы определения местоположения включены. - person Stonz2   schedule 09.03.2015NSLocationWhenInUseUsageDescription
в вашем plist. Я думаю, вам нужно предоставить текст, который пользователь увидит при отображении предупреждения. - person Stonz2   schedule 09.03.2015kCLAuthorizationStatusDenied
в методеlocationManager:didChangeAuthorizationStatus:
. Если у вас включены службы определения местоположения (Настройки -> Конфиденциальность -> Службы определения местоположения), то нет видимых причин, по которым они не должны работать. - person Stonz2   schedule 09.03.2015