【问题标题】:iOS app doesn't ask for location permissioniOS 应用不要求位置权限
【发布时间】:2014-08-21 06:50:41
【问题描述】:

我的 Swift-iOS 应用旨在在地图上显示用户的位置。但是,XCode 调试控制台告诉我需要请求权限才能显示用户的位置。我想,我这样做了,但对话永远不会出现。

这是错误消息,在我调用 CLLocationManager::requestWhenInUseAuthorization() 的 ViewController 下方

错误:

2014-06-30 21:25:13.927 RowingTracker2[17642:1608253] 尝试在不提示位置授权的情况下启动 MapKit 位置更新。必须先调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization]。

视图控制器:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate {
    @IBOutlet var mapview: MKMapView = nil
    var locationmgr : CLLocationManager!
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        locationmgr = CLLocationManager()
        locationmgr.requestWhenInUseAuthorization()
        mapview.showsUserLocation = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

如何请求授权使用该位置? 你可以找到完整的项目here.(Commit)

信息

即使让 ViewController 从CLLocationManagerDelegate 继承并将委托设置为self,如here 所示也无济于事。

【问题讨论】:

    标签: ios swift mapkit core-location


    【解决方案1】:

    从 iOS 8 开始,您必须调用其中一个 request... 函数并将适当的条目添加到您的 Info.plist 文件中,NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription

    更多信息,请参阅参考here

    更新

    确保

    1. 地图以模拟位置为中心。
    2. 还要确保模拟位置。要么在 XCode 的调试区域(下方)中执行此操作(见图),要么在 Debug > Location 下的模拟器中执行此操作。

    调试区:

    【讨论】:

    • 现在,它请求许可,但仍然没有显示用户位置。新问题,或者可以将其添加到此问题中吗?
    • 你在什么环境下测试?
    • 带有 XCode 6-Beta2 和模拟器的 OS X Maverics。目标平台 7.1。今晚我会再试一次。
    • 在模拟器中,您必须在方案设置或调试窗口底部的工具栏中启用位置模拟。
    • 它在模拟器中启用(我找不到“方案设置”),但在调试窗口的底部没有。它也以我的国家(德国)为中心,一旦我选择了“伦敦”,它就不会自动居中(我知道如何让它这样做)。
    【解决方案2】:

    您需要使用 requestWhenInUseAuthorization 并且还需要在 yourapp-Info.plist 中创建一个名为 NSLocationWhenInUseUsageDescription 的值

    【讨论】:

    • 疯了,但这似乎对我有用。不知道你是怎么想出来的,但是很好的发现......我花了几个小时试图弄清楚这个!
    • 现在看来这是必须的了。我也忘了放这个,应用不会要求位置许可。
    【解决方案3】:

    我使用NSLocationAlwaysUsageDescription,其值为请求权限时会弹出的文本,如

    “我希望获得 24/7 全天候监视你的权限”

    我还会添加 NSLocationWhenInUseUsageDescription 并将值作为消息。

    【讨论】:

      【解决方案4】:

      正如 David BerryCayke PrudenteLevi Johnson 所述,我只需将 NSLocationAlwaysUsageDescription 添加到我的 Info.plist 文件中即可。为了更多地了解我为什么需要这个,我去了进一步的文档,我在这里分享,因为它可以帮助其他人,就像他们帮助我一样。

      用户提示包含来自应用的 Info.plist 文件中的 NSLocationWhenInUseUsageDescription 键的文本,调用此方法时需要该键的存在。

      https://developer.apple.com/documentation/corelocation/cllocationmanager/1620562-requestwheninuseauthorization

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-17
        • 2018-03-02
        • 2017-08-02
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-07-06
        • 2022-08-02
        相关资源
        最近更新 更多