我正在为iOS 8编写一段Swift代码。我试图做一些涉及位置的事情,所以我在我的swift视图控制器文件中实现了以下内容:
let locationManger:CLLocationManager = CLLocationManager()
var speedReceived:Double = 0
override func viewDidLoad() {
super.viewDidLoad()
locationManger.delegate = self
locationManger.desiredAccuracy = kCLLocationAccuracyBest
let authstate = CLLocationManager.authorizationStatus()
if(authstate == CLAuthorizationStatus.NotDetermined){
println("Not Authorised")
locationManger.requestWhenInUseAuthorization()
}
// Do any additional setup after loading the view, typically from a nib.
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
var location:CLLocation = locations[locations.count - 1] as CLLocation
if(location.horizontalAccuracy > 0){
self.speedReceived = location.speed
println(self.speedReceived)
}
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Couldn't get your location")
}
然而,我似乎不能让这段代码工作。它不会保存我的首选项以供位置使用。它甚至不会提示我提供访问位置的许可。我已尝试更新我的info.plist。但它不起作用。顺便说一句,如果我在模拟器的隐私设置中选择了always,如果我立即切换回应用程序,它就会起作用。有人能帮上忙吗?我确信这就是问题所在,因为我在我的控制台上没有得到授权。
有什么帮助吗?
发布于 2014-07-17 03:58:59
我曾经遇到过一个类似的问题,即使在将NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription键添加到plist之后,这个问题仍然存在。
最后,我在plist中添加了"Privacy - Location Usage Description“键(除了新的键),瞧,它成功了!在它工作后,一旦我能够从plist中删除"Privacy - Location Usage Description“键,并继续成功地请求授权。
发布于 2014-09-11 13:25:50
iOS 8更改了位置授权策略。具有向后兼容性的解决方案:
SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
[self.locationManager respondsToSelector:requestSelector]) {
[self.locationManager performSelector:requestSelector withObject:NULL];
} else {
[self.locationManager startUpdatingLocation];
}
提醒:在Info.plist中设置NSLocationWhenInUseUsageDescription密钥
发布于 2014-09-17 03:58:19
我也有同样的问题。
根据记录,这不是官方的答案。第一个答案是正确的。我只想添加一个指向FOSS (Objective-C)项目的链接来说明修复。
如前所述,我必须添加密钥。我的应用程序不需要在后台运行,所以我在info.plist中添加了NSLocationWhenInUseUsageDescription密钥。
如果添加一个字符串作为该键的值(该键的可选-the存在足以设置条),则该字符串将出现在授权弹出窗口中。
然后,我在所有CLLocationManager startUpdating调用之前添加了以下代码:
if ( [locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)] )
{
[locationManager requestWhenInUseAuthorization];
}
respondsToSelector很重要,因为该呼叫仅在iOS 8中可用。
第一次调用此函数时,将显示警报。在那之后,它就失败了。
请注意,我调用requestWhenInUseAuthorization
它必须与我在plist中输入的值相匹配。我想你可以把两个都放进去,但我不知道。我不需要这么做。
该项目是here。大部分工作(不是很多)都在BMLTAppDelegate.m文件中。
这是一个令人讨厌的惊喜。很多人不知道他们的应用程序会在iOS 8中停止工作。他们会做和我最初做的一样的事情:在模拟器中快速运行它,注意挂起,并将其记为测试版错误。
现在,我有了一个不同的问题:我的所有应用程序都被修复了,但当我试图将应用程序上传到App Store时,Xcode崩溃了。我已经打开了雷达。
Xcode6有点让人抓狂。我希望一个补丁很快就会出来。
https://stackoverflow.com/questions/24669985
复制相似问题