不提示在App中启用位置服务

更新:这不是一个重复。 正如我原来的问题所述,我已经将所需的密钥添加到info.plist中,问题依然存在。 我已经尝试了所有三种不同组合的按键。

在任何人感到不满之前,我已经阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,并且无法弄清楚为什么我的应用拒绝提示用户允许使用授权。

我已将以下关键字添加到我的Info.plist文件中,并附带了字符串值:

NSLocationWhenInUseUsageDescription

然后我写了(在Swift和Obj-C中)应该提示用户的代码:

@property CLLocationManager *location;
...
@synthesize location;
...
location = [[CLLocationManager alloc] init];
location.delegate = self;

location.desiredAccuracy = kCLLocationAccuracyBest;
location.distanceFilter = kCLDistanceFilterNone;

[location requestWhenInUseAuthorization];
[location startUpdatingLocation];


I'm using the following CLLocationManagerDelegate methods.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

这基本上是从Apple的“LocateMe”示例代码中直接复制的。

无论我尝试什么样的各种次序或轻微更改,应用程序都不会提示授权。 我使用switch语句来确定[CLLocationManager authorizationStatus]的状态,但不断收到“未确定”响应。

if ([CLLocationManager locationServicesEnabled]) {
        switch ([CLLocationManager authorizationStatus]) {
            case kCLAuthorizationStatusAuthorizedAlways:
                NSLog(@"Always Authorized");
                break;
            case kCLAuthorizationStatusDenied:
                NSLog(@"Denied");
                break;
            case kCLAuthorizationStatusAuthorizedWhenInUse:
                NSLog(@"Authorized in Use");
                break;
            case kCLAuthorizationStatusNotDetermined:
                NSLog(@"Not Determined");
                break;
            case kCLAuthorizationStatusRestricted:
                NSLog(@"Restricted");
                break;
        }

    }

任何帮助将不胜感激。 我使用iOS 8.1.2物理设备和iOS 8.2(12D5452a)模拟器运行Xcode 6.2(6C101)进行测试。


很多有用的比较:http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

另外,愚蠢的问题时间:你混合_location和self.location,但你不显示你的财产/合成代码。 你确定你是在同一个对象上操作吗?


在挖掘了两天之后,我遇到了完全相同的问题,事实证明,应用程序不会从项目导航器窗格中的包中包含的info.plist文件中读取,因为它已被本地化为另一种语言和基础国际化正在使用,这意味着在Finder中会有3个info.plist文件:

1-在测试文件夹下

2-在base.lproj文件夹下

3-在ar.lprj下(ar指阿拉伯语)。

该项目从base.lproj的版本中读取,该版本未包含在项目导航器窗格中的包中。

我所做的是我拿了我想要的plist文件的备份副本(上面的数字2),并删除了项目导航器中的info.plist文件的本地化,并选择从磁盘删除完全删除它,然后我拿了备份副本并放置在Finder项目的根目录下,并将其导入到Xcode中,现在该项目将从新的info.plist文件中读取关键NSLocationWhenInUseUsageDescription在应用程序启动时触发用户授权警报。

希望这可以帮助。


我发现在你的info.plst文件中你不能使用Privacy - Location Usage Description键,你必须有一个名为NSLocationWhenInUseUsageDescription的键和一个值。 我可以通过将此密钥添加到我的info.plist中来获得您的代码

在这里输入图像描述

#import <MapKit/MapKit.h>

@interface ViewController ()

@property CLLocationManager * location;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _location = [[CLLocationManager alloc] init];

    self.location.delegate = self;
    self.location.desiredAccuracy = kCLLocationAccuracyBest;
    self.location.distanceFilter = kCLDistanceFilterNone;

    [_location requestWhenInUseAuthorization];
    [self.location startUpdatingLocation];
}
链接地址: http://www.djcxy.com/p/82985.html

上一篇: Not being prompted to enable Location Services in App

下一篇: HTML5 Speech Synthesis API voice/languages support