首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CLLocationManager授权问题iOS 8

CLLocationManager授权问题iOS 8
EN

Stack Overflow用户
提问于 2014-07-10 14:38:31
回答 5查看 26K关注 0票数 16

我正在为iOS 8编写一段Swift代码。我试图做一些涉及位置的事情,所以我在我的swift视图控制器文件中实现了以下内容:

let locationManger:CLLocationManager = CLLocationManager()

代码语言:javascript
复制
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,如果我立即切换回应用程序,它就会起作用。有人能帮上忙吗?我确信这就是问题所在,因为我在我的控制台上没有得到授权。

有什么帮助吗?

EN

回答 5

Stack Overflow用户

发布于 2014-07-17 03:58:59

我曾经遇到过一个类似的问题,即使在将NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription键添加到plist之后,这个问题仍然存在。

最后,我在plist中添加了"Privacy - Location Usage Description“键(除了新的键),瞧,它成功了!在它工作后,一旦我能够从plist中删除"Privacy - Location Usage Description“键,并继续成功地请求授权。

票数 7
EN

Stack Overflow用户

发布于 2014-09-11 13:25:50

iOS 8更改了位置授权策略。具有向后兼容性的解决方案:

代码语言:javascript
复制
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密钥

票数 4
EN

Stack Overflow用户

发布于 2014-09-17 03:58:19

我也有同样的问题。

根据记录,这不是官方的答案。第一个答案是正确的。我只想添加一个指向FOSS (Objective-C)项目的链接来说明修复。

如前所述,我必须添加密钥。我的应用程序不需要在后台运行,所以我在info.plist中添加了NSLocationWhenInUseUsageDescription密钥。

如果添加一个字符串作为该键的值(该键的可选-the存在足以设置条),则该字符串将出现在授权弹出窗口中。

然后,我在所有CLLocationManager startUpdating调用之前添加了以下代码:

代码语言:javascript
复制
if ( [locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)] )
{
    [locationManager requestWhenInUseAuthorization];
}

respondsToSelector很重要,因为该呼叫仅在iOS 8中可用。

第一次调用此函数时,将显示警报。在那之后,它就失败了。

请注意,我调用requestWhenInUseAuthorization

它必须与我在plist中输入的值相匹配。我想你可以把两个都放进去,但我不知道。我不需要这么做。

该项目是here。大部分工作(不是很多)都在BMLTAppDelegate.m文件中。

这是一个令人讨厌的惊喜。很多人不知道他们的应用程序会在iOS 8中停止工作。他们会做和我最初做的一样的事情:在模拟器中快速运行它,注意挂起,并将其记为测试版错误。

现在,我有了一个不同的问题:我的所有应用程序都被修复了,但当我试图将应用程序上传到App Store时,Xcode崩溃了。我已经打开了雷达。

Xcode6有点让人抓狂。我希望一个补丁很快就会出来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24669985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档