请求位置时应用程序崩溃并且用户啥都不做

Posted

技术标签:

【中文标题】请求位置时应用程序崩溃并且用户啥都不做【英文标题】:App crashes when requesting location and user does nothing请求位置时应用程序崩溃并且用户什么都不做 【发布时间】:2017-03-04 00:55:51 【问题描述】:

我有一个使用用户位置搜索周围的按钮。如果他们尚未授予/拒绝使用其位置的权限,它会请求权限

相关代码:

func updateLocationStatus()
    locationEnabled = CLLocationManager.locationServicesEnabled()
    appLocationEnabled = CLLocationManager.authorizationStatus()


@IBAction func searchNearby(sender: UIButton) 
    updateLocationStatus()
    if appLocationEnabled == CLAuthorizationStatus.Denied 
        //Show an alert to let them know they've denied location permissions
        presentViewController(alert, animated: true, completion: nil)
    
    else if appLocationEnabled == CLAuthorizationStatus.NotDetermined || 
        appLocationEnabled != CLAuthorizationStatus.AuthorizedWhenInUse &&
        appLocationEnabled != CLAuthorizationStatus.AuthorizedAlways
        locationManager.requestWhenInUseAuthorization()
    
    else
        activityIndicator.startAnimating()
        locationManager.requestLocation()
    

正常使用时效果很好。但是,如果您让“允许应用程序使用您的位置 [不允许] [允许]”警报停留大约 5 秒钟,则应用程序会崩溃。在 Xcode 中跳转到导致错误的行是

locationManager.requestWhenInUseAuthorization()

提供的错误是

线程 1:EXC_BAD_ACCESS(代码=2,地址=0xsomeaddress)

我什至不知道从哪里开始解决这个问题,因为错误没有告诉我任何信息,并且功能工作得非常好,除非你什么都不做太久

【问题讨论】:

回溯是否提供任何有用的信息? 是的,确实如此。原来由于我在没有确定授权的情况下调用这个函数,所以在弹出对话框时会重复调用searchNearby函数,直到发生堆栈溢出。我认为指令会按顺序运行(即代码执行在 requestAuthorization 上停止,直到确定答案)但似乎情况并非如此。感谢您的建议,我从不知道回溯是 xcode 中的一件事。请回复为答案,以便我接受它 【参考方案1】:

回溯是否提供任何有用的信息?在控制台中,您可以在 Xcode 中断时在提示符处键入 bt。或者,您可以查看调试导航器。

【讨论】:

【参考方案2】:

也许这会解决这个问题。确保在 Info.plist 中添加适当的键值组合。

有点像这样:

您可能还想设置一个断点以确保该位置确实已启用。

要开始查找位置,您还应该配置位置管理器的desiredAccuracydistanceFilter 属性,然后调用requestLocation()startUpdatingLocation()

【讨论】:

我在 Info.plist 中设置了隐私 - 位置使用说明和 NSLocationWhenInUseUsageDescription 字符串。我从不要求 Always Usage 所以我没有那个描述

以上是关于请求位置时应用程序崩溃并且用户啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

VueGapi 在请求多个范围时啥都不做

在设计上注销啥都不做

当用户啥都不做时,应用程序中的屏幕没有关闭

Spring + Hibernate 事务需要 25 秒啥都不做

pushViewController 在多个标签应用程序中啥都不做?

Powershell生成的计划任务在运行时啥都不做