watchOS - 如何从扩展委托更新 SwiftUI 视图
Posted
技术标签:
【中文标题】watchOS - 如何从扩展委托更新 SwiftUI 视图【英文标题】:watchOS - How to update a SwiftUI view from extension delegate 【发布时间】:2019-08-26 14:11:30 【问题描述】:我有一个独立的手表应用程序,可以全天跟踪用户的卡路里。
因此,当我第一次通过 Xcode 构建和运行应用程序时,会调用视图的 onAppear(_:)
方法,并从 HealthKit 存储库中正确检索卡路里。
每当我在 5 分钟后放下手并抬起手腕时,ExtensionDelegate 方法的 applicationDidBecomeActive
被调用,但 SwiftUI 视图的 onAppear(_:)
方法没有被调用(我的 HealthKit 代码用于获取卡路里被调用在这个函数中)和屏幕显示的卡路里数与应用程序上一次运行 Xcode 时相同。
这是预期的行为吗?如果是,那么如何通过 Extension Delegate 更新我的 SwiftUI 视图?
【问题讨论】:
【参考方案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()
【讨论】:
太好了,我会试试这个,让你知道结果 感谢我能够使用此代码和@State var listID: String
然后为 listID 生成一个随机代码并将 .id(listID)
添加到我的列表中,以便每次打开应用程序时都会刷新以上是关于watchOS - 如何从扩展委托更新 SwiftUI 视图的主要内容,如果未能解决你的问题,请参考以下文章
Swift:UIViewController 实例未从 URLSession 委托方法接收更新
更新仅 watchOS 的应用程序“生成的 iOS”plist?