要点: 以前运行的应用程序无法运行geode代码和反向geode代码。反向geode代码失败,因为geode代码无法提供位置。然后我讨论了Apple自己的LocateMe示例代码,并启用了Privacy下的位置服务。我还将位置服务下的“允许位置访问”设置为“始终”,但在运行Apple的LocateMe或我自己的应用程序后,此设置会自动更改为空。
重现步骤: 似乎位置服务SDK获取位置已被破坏。之前在iPhone 5上运行的软件在升级到IOS 8后停止工作。 步骤1.加载示例LocateMe Apple的示例Core Location示例项目; 步骤2.在系统设置下启用位置服务,并将应用程序的“允许位置服务”更改为始终。
Get-Location失败,“always”设置被删除。
预期结果: 获取位置和位置更新。
实际结果: 见上文。
版本: IOS 8.0.0和8.0.2
注意:
配置: iPhone 5和iPhone 6 Plus
添加此项也无济于事: [self.locationManager requestAlwaysAuthorization];
答案 0 :(得分:1)
使用
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) \
([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8")) {
CLLocationManager *manager = [[LocationManager sharedInstance] clLocationManager];
[manager requestWhenInUseAuthorization];
[manager startUpdatingLocation]; // or what ever location function you need.
} else {
// The usual way for iOS <= 7
// (Do what you did before)
}
除了上述内容之外,您还必须在info.plist文件中为密钥NSLocationWhenInUseUsageDescription
添加字符串值。当iOS询问用户是否授予对应用程序位置的访问权限时,该值是Altert中显示的字符串。
为了向后兼容,您可能还想添加密钥NSLocationUsageDescription
。