swift CLLocationManager.locationServicesEnabled()的主线程警告

jdgnovmf  于 2023-08-02  发布在  Swift
关注(0)|答案(3)|浏览(250)

我刚刚升级到Xcode 14.0,当我在iOS 16设备上运行我们的应用时,调用:
第一个月
正在返回警告:

如果在主线程上调用此方法,可能会导致UI无响应。相反,请考虑等待-locationManagerDidChangeAuthorization:回调并首先检查authorizationStatus

如果我必须等待失败/回调,而不是直接调用CLLocationManager.locationServicesEnabled()方法,我需要对代码进行重大更改。这似乎只发生在iOS 16设备上。如何解决这个问题有什么建议吗?

hi3rlvi2

hi3rlvi21#

使用调度队列将其移出主队列,如下所示:

DispatchQueue.global().async {
      if CLLocationManager.locationServicesEnabled() {
      // your code here
      }
}

字符串

ipakzgxi

ipakzgxi2#

我遇到了同样的问题,并使用Async/Await克服了它。
CLLocationManager调用 Package 在一个异步函数中。

func locationServicesEnabled() async -> Bool {
    CLLocationManager.locationServicesEnabled()
}

字符串
然后相应地更新使用此函数的位置。

Task { [weak self] in

    if await self?.locationServicesEnabled() { 
        // Do something
    }
}

6uxekuva

6uxekuva3#

在我的例子中,我必须将main.async和global().async分开,以便在后台检查一些选项。

相关问题