CoreLocation WidgetKit

CoreLocation WidgetKit

我无法让 CoreLocationWidgetKit 工作。我能够在 SwiftUI 应用程序中使用 ObservableObject class 来做到这一点。现在我不确定如何使用小部件执行此操作。

我在 TimelineEntry 中添加了 LocationManager,然后在 getTimeline() 中调用了 requestLocation 函数,但它也不起作用。我没有在我的 Widget 中看到任何更新。我按照 here.

的说明向我的小部件添加了正确的键
import Foundation
import CoreLocation
import WidgetKit

class LocationManager: NSObject, CLLocationManagerDelegate {
    
    var locationManager = CLLocationManager()
    var location: CLLocation?
    
    override init() {
        super.init()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        WidgetCenter.shared.reloadAllTimelines()
    }
    
    func requestUpdate(_ completion: @escaping () -> Void) {
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()
        WidgetCenter.shared.reloadAllTimelines()
    }
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        self.location = location
    }
    
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error.localizedDescription)
    }
}

将我的位置管理器移动到 TimelineProvider 并将我的变量添加到我的小部件 TimelineEntryCoreLocation 现在正在正确更新。