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

问题描述 投票:1回答:1

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

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

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

watchkit swiftui watch-os
1个回答
0
投票

我认为无法在举手时调用.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(
© www.soinside.com 2019 - 2024. All rights reserved.