我正在尝试将地理定位功能从 CLLocationManager 升级到 CLMonitor。主要问题是我应该如何将 MonitoredRegions 从 CLLocationManager 移动到 CLMonitor。由于 CLLocationManager 中的 ios17 功能(启动/停止监控)已被弃用,因此如果同时我不应该使用 StopMonitoring 将其从 CLLocationManager 中删除,我应该如何移动该条件。
CLMonitor 没有在 CLLocationManager 中添加条件。当我向 CLMonitor 添加某些内容时,然后在 CLLocationManager 中,我们也会在 MonitoredRegions 中看到这种情况,但具有自动生成的名称 (some_ generated_chars@identifier)
弃用并不意味着它不起作用,只是有一种新的/更好的方法来做某事。弃用的功能最终会消失,但这通常需要数年时间。
您可以自行决定是转向
CLMonitor
还是继续使用CLLocationManager
。如果您的应用程序的目标版本早于 iOS 17,您可能可以坚持使用 CLLocationManager
而不是使用多个代码路径。
与 CLMonitor
采用的委托模式相比,
CLLocationManager
提供了更现代、基于闭包的界面。这更加“Swifty”,并且它也适用于 Swift async/await - 我不确定这是否会产生很大的影响,因为您可能是根据问题标签使用 Maui 的。
但是,如果您确实想更改代码以在 iOS 17 上使用
CLMonitor
,您将采用以下方法
CLMonitor
之前,检查用户默认值中的布尔值 - 类似于 geoFenceUpdated
。true
,则不执行任何操作。false
,则创建一个CLLocationManager
,删除所有地理围栏并将geoFenceUpdated
设置为true
CLMonitor
并创建任何所需的地理围栏。