我有一个独立的手表应用程序,可以跟踪用户全天的卡路里。
因此,当我第一次通过Xcode构建和运行应用程序时,将调用视图的onAppear(_:)
方法,并且可以从HealthKit存储库中正确检索卡路里。
每当我放下手并在5分钟后举起手腕时,都会调用ExtensionDelegate方法的applicationDidBecomeActive
,但是不会调用SwiftUI视图的onAppear(_:)
方法(我的HealthKit代码提取卡路里)在此函数中),并且在上一次应用程序通过Xcode运行时,屏幕显示的卡路里数量相同。
这是预期的行为吗?如果是,那我如何通过扩展委托来更新我的SwiftUI视图?
答案 0 :(得分:1)
我认为在手腕抬高时未能调用.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()}