Ios 未提示在应用程序中启用位置服务
更新:这不是重复的。我已经向info.plist添加了所需的密钥,如我在原始问题中所述,问题仍然存在。我试过三种不同组合的钥匙 在任何人感到不安之前,我已经阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法理解为什么我的应用程序在使用授权时拒绝提示用户允许 我已将以下键添加到我的Ios 未提示在应用程序中启用位置服务,ios,objective-c,cllocationmanager,cllocation,Ios,Objective C,Cllocationmanager,Cllocation,更新:这不是重复的。我已经向info.plist添加了所需的密钥,如我在原始问题中所述,问题仍然存在。我试过三种不同组合的钥匙 在任何人感到不安之前,我已经阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法理解为什么我的应用程序在使用授权时拒绝提示用户允许 我已将以下键添加到我的Info.plist文件中,并附带一个字符串值: NSLocationWhenInUseUsageDescription 然后,我(用Swift和Obj-C)编写了提示用户的代码: @property CLLoc
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]
的状态,但不断收到“Not Determined”响应
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)进行测试。我发现在info.plst文件中,您不能使用隐私-位置使用说明密钥,在使用说明时,您必须有一个名为
nslocation的密钥和一个值。通过将此密钥添加到我的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];
}
#导入
@界面视图控制器()
@物业CLLocationManager*位置;
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
_位置=[[CLLocationManager alloc]init];
self.location.delegate=self;
self.location.desiredAccuracy=KCallocationAccuracyBest;
self.location.distanceFilter=kCLDistanceFilterNone;
[_使用授权时的位置请求];
[self.location startUpdatingLocation];
}
这里有很多有用的比较:
还有,愚蠢的提问时间:你混合了_location和self.location,但你没有显示你的属性/合成代码。你确定是在同一个对象上操作吗?我遇到了完全相同的问题,在深入研究两天后,发现应用程序没有读取project navigator窗格中捆绑包中包含的info.plist文件,因为它已本地化为另一种语言,并且正在使用基本国际化,这意味着在Finder中将有3个info.plist文件:
1-在测试文件夹下
2-在base.lproj文件夹下
3-在ar.lprj下(ar指阿拉伯语)
项目从base.lproj的版本中读取,该版本不包含在项目导航器窗格中的捆绑包中
我所做的是,我获取了我想要的plist文件的备份副本(上面的第2个),删除了project navigator中info.plist文件的本地化,并选择从磁盘删除以将其完全删除,然后在Finder中将备份副本放在project的根目录下,并将其导入Xcode中,现在,该项目将从新的info.plist文件和密钥nslocationwhenUsageDescription读取应用程序启动时的用户授权警报
希望这能有所帮助。这可能有点傻,但我只是花了将近2个小时仔细检查了所有关于CLLocationManager权限的答案
当我终于意识到我有2个info.plist文件,而我使用的是错误的文件时,我觉得自己很愚蠢
您可以签入项目的生成设置-有一个名为Info.plist File的值
只想把它留在这里供将来的读者阅读。如果您更改了iPhone模拟器中的位置设置,这可能会导致提示不显示。例如,如果您已经通过Allow Locations access iOS提示符设置了位置权限,并做出了决定,则这将存储在iPhone模拟器的隐私设置中,并随后调用locationManager.requestAlwaysAuthorization()
或locationManager.RequestWhenUseAuthorization())
将不会显示iOS提示,因为您已经为应用程序定义了隐私->位置设置
要清除iPhone模拟器的设置,请执行以下操作:“iOS模拟器”->“重置内容和设置…”
另外,我在Xcode中做了一个干净的构建,在某个时候退出并重新启动了iPhone模拟器,我可能错误地认为这部分有任何帮助 @n00bProgrammer我在模拟器的“设置”>“重置”选项卡中看不到可用的重置选项。此外,我还编写了两个程序,一个用Swift,一个用Obj-C,它们都做同样的事情。我还用一个物理设备进行了测试,得到了同样的结果。我还没有尝试重置硬件。但是我正在8.1而不是8.2上进行测试。我已经用三个不同的键以各种方式进行了测试,希望能让它工作——在某一点上,我的一个项目神奇地开始工作,但我无法将这些更改复制到这个简单的项目中(这个测试的唯一目的是谁)我编辑了代码,添加了@synthesis并修改了属性,只需使用值location
。也。我读过这一页,但出于某种原因,它对我的问题没有帮助。nslocationwhenUsageDescription
是我的Info.plist文件中的一个字符串值。这是我的一个活动项目的剪报,正确提示。除了iOS7/8兼容性测试之外,它基本上与您的测试相匹配_locationManager=[[CLLocationManager alloc]init]_locationManager.delegate=self;如果([\u locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]{[\u locationManager requestWhenInUseAuthorization];}[\u locationManager startUpdatingLocation];`呵呵。猜测模式:检查设置>隐私>位置服务。您的应用程序已经有任何设置了吗?没有显示任何设置,授权状态为