2015-11-04 30 views
0

这是一个奇怪的行为,在iOS应用程序。 这是关系到我的问题代码:位置服务:地点总是和位置当使用

初始化位置的东西:

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[locationManager requestWhenInUseAuthorization]; 

当请求定位功能:

if ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorized) { 
    // Give a message to the user: NO GPS HERE! 
} 

而且app.plist里面我把钥匙:NSLocationWhenInUseUsageDescription,带一个字符串。

由于某些原因,我不明白,它不起作用。我被告知GPS不允许这个应用程序,我必须改变隐私设置,我会根据要求更改隐私设置,我会回来再试一次,并获得相同的信息...。并陷入无限循环。

另一方面,如果我把一个关键字:NSLocationAlwaysUsageDescription,与一个字符串在app.plist内;不改变代码中的任何内容。 然后我的应用程序被允许使用位置功能(LocationAlways)。 尽管它比没有GPS好,但我的应用最终会使用-LocationAlways模式,因为它很乐意使用-LocationWhenInUse模式。

任何人都有同样的问题,并找到了解决办法?

回答

1

因为kCLAuthorizationStatusAuthorized在iOS的8

文件已过时

kCLAuthorizationStatusAuthorized 这个程序被授权使用定位服务。

适用于iOS 2.0及更高版本。 在IOS 8.0

见枚举的文件已过时,你就会知道为什么kCLAuthorizationStatusAuthorized工作

typedef enum { 
    kCLAuthorizationStatusNotDetermined = 0, 
    kCLAuthorizationStatusRestricted, 
    kCLAuthorizationStatusDenied, 
    kCLAuthorizationStatusAuthorized, 
    kCLAuthorizationStatusAuthorizedAlways = kCLAuthorizationStatusAuthorized, 
    kCLAuthorizationStatusAuthorizedWhenInUse 
} CLAuthorizationStatus; 

所以,如果你要求whenInUse,使用此键kCLAuthorizationStatusAuthorizedWhenInUse

+0

有道理,.....和它的工作。 谢谢! – Michel