**更新:**这不是一个重复.我已经添加了所需的关键到info.plist中所述在我原来的问题和问题仍然存在.我已经尝试了所有三个键在各种组合.
在任何人感到不安之前,我已经阅读了许多Apple Dev论坛帖子和堆栈溢出帖子,无法弄清楚为什么我的应用程序拒绝提示用户允许使用时授权。
我将以下键添加到Info.plist
文件中,并附带一个String值:
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
型
这基本上是直接从苹果的“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;
}
}
型
我正在运行Xcode 6.2(6C 101)与iOS 8.1.2物理设备和iOS 8.2(12 D5452 a)模拟器进行测试。
5条答案
按热度按时间9gm1akwq1#
如果您在iPhone模拟器中更改了位置设置,这可能会导致提示不显示。例如,如果您已经通过允许位置访问iOS提示符设置了位置权限,并做出了决定,这将存储在iPhone模拟器的隐私设置中,因此随后对
locationManager.requestAlwaysAuthorization()
或locationManager.requestWhenInUseAuthorization()
的调用将不会显示iOS提示符,因为您已经定义了隐私->应用的位置设置。要清除iPhone模拟器的设置:
"iOS Simulator" -> "Reset Content and Settings..."
此外,我在Xcode中做了一个干净的构建,并在某个时候退出并重新启动iPhone模拟器,我可能会错误地认为这部分有任何帮助。
cl25kdpy2#
我面临着完全相同的问题,在挖掘了两天后,原来应用程序不读取项目导航器窗格中包含的包中的info.plist文件,因为它已本地化为另一种语言,并且正在使用基本国际化,这意味着在MySQL中将有3个info.plist文件:
1-在“测试”文件夹下
2-在base.lproj文件夹下
3-在ar.lprj下(ar指阿拉伯语)。
项目从bundle中的bundle中读取base.lproj的版本,而bundle中的bundle不包含在项目导航器的窗格中。
我所做的是,我采取了一个备份副本的plist文件,我想(上面的第2条),并删除了项目导航器中的info.plist文件的本地化,并选择从磁盘删除以完全删除它,然后我将备份副本放在项目的根目录下,并将其导入Xcode,现在,项目从新的info.plist文件中读取数据,关键字NSLocationWhenInputUsageDescription在应用程序启动时触发用户授权警报。
希望这对你有帮助。
zwghvu4y3#
我发现在你的info.plst文件中,你不能使用 Privacy - Location Usage Description 键,你必须有一个名为
NSLocationWhenInUseUsageDescription
的键和一个值。x1c 0d1x的数据
字符串
tjrkku2a4#
这可能很傻,但我花了将近2个小时的时间,两次和三次检查所有我能找到的关于CLLocationManager权限的答案。
我觉得愚蠢的时候,我终于意识到,我有2个信息。plist文件,我用错了!
您可以检入项目的构建设置-有一个名为Info.plist File的值。
只是想把它留给未来的读者。
68bkxrlz5#
我浪费了1-2天的时间在这上面。只从info.plist更新在我的情况下不起作用。
如果你导航到
TARGETS -> YOUR_APP_NAME -> Info section
您可以看到自定义iOS目标属性,在这里您可以看到目的字符串。更新位置,联系人,通知等的目的字符串。确保权限也在info.plist中可见。