CoreLocation WidgetKit
CoreLocation WidgetKit
我无法让 CoreLocation
在 WidgetKit
工作。我能够在 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
并将我的变量添加到我的小部件 TimelineEntry
。 CoreLocation
现在正在正确更新。
我无法让 CoreLocation
在 WidgetKit
工作。我能够在 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
并将我的变量添加到我的小部件 TimelineEntry
。 CoreLocation
现在正在正确更新。