16

我正在使用新的 WidgetKit 为 iOS 14 制作主屏幕小部件,并且我希望我的小部件时间线在用户响应通知时刷新。

这是我的代码目前的样子:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        
    if response.actionIdentifier == "actionIdentifier" {        
        print("notification response received")
        WidgetCenter.shared.reloadAllTimelines()
    }

    completionHandler()
}

但是当用户响应通知时,我的小部件没有更新。打印语句被打印,所以我知道我的应用程序正在接收响应。当我reloadAllTimeLines()在我的应用程序中调用其他任何地方时,小部件也会刷新,因此我确信我的小部件扩展已正确实现。但在上述情况下它没有更新。

这是一个错误还是我做错了什么?或者是否有另一种方法可以在用户响应通知后重新加载小部件时间线。

4

2 回答 2

10

这似乎在 iOS 14 beta 2 中得到修复。当从通知响应中调用 refreshAllTimelines() 时,小部件现在可以正确更新。

于 2020-07-09T08:02:59.630 回答
4

尝试在 Dispatch Main 下调用它,或者尝试延迟调用它,例如 2 秒进行测试。

我在 SwiftUI 的列表中调用相同的

let listArray = ["Item1", "Item2", "Item3"]
List(listArray) { listObject in
    Button(action: {
        WidgetCenter.shared.reloadAllTimelines()
    }) {
        HStack {
            Text(listObject)
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
                .padding()
        }
    }
}

它的作用就像魅力一样。

于 2020-07-07T19:22:53.620 回答