我有一个独立的手表应用,可以全天跟踪用户的卡路里。因此,当我首次通过Xcode构建和运行应用程序时,将调用视图的onAppear(_:)
方法,并且可以从HealthKit存储库中正确检索卡路里。
[每当我放下手并在5分钟后举起手腕时,都会调用ExtensionDelegate方法的applicationDidBecomeActive
,但是不会调用SwiftUI视图的onAppear(_:)
方法(此功能),并且在上一次应用程序通过Xcode运行时,屏幕显示的卡路里数相同。
这是预期的行为吗?如果是,那么如何通过扩展代理更新我的SwiftUI视图?
我认为无法在举手时调用.onAppear是一个错误,因此我对此提出了反馈。同时,我将其作为“举手”活动进行工作。
// ExtensionDelegate.swift
extension Notification.Name {
static var applicationIsActive: Notification.Name {
Notification.Name("applicationIsActive")
}
}
class ExtensionDelegate: NSObject, WKExtensionDelegate {
func applicationDidBecomeActive() {
NotificationCenter.default.post(name: .applicationIsActive, object: nil)
}
}
// ContentView.swift
private var isActive = NotificationCenter.default.publisher(for: .applicationIsActive)
.onReceive(isActive) {_ in self.viewModel.refresh(