watchOS-如何从扩展委托中更新SwiftUI视图

时间:2019-08-26 14:11:30

标签: watchkit swiftui watchos

我有一个独立的手表应用程序,可以跟踪用户全天的卡路里。 因此,当我第一次通过Xcode构建和运行应用程序时,将调用视图的onAppear(_:)方法,并且可以从HealthKit存储库中正确检索卡路里。

每当我放下手并在5分钟后举起手腕时,都会调用ExtensionDelegate方法的applicationDidBecomeActive,但是不会调用SwiftUI视图的onAppear(_:)方法(我的HealthKit代码提取卡路里)在此函数中),并且在上一次应用程序通过Xcode运行时,屏幕显示的卡路里数量相同。

这是预期的行为吗?如果是,那我如何通过扩展委托来更新我的SwiftUI视图?

1 个答案:

答案 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()}