ios - 通过 widgetPerformUpdate 刷新 Today Extension 内容

标签 ios swift today-extension

我的应用程序中有一个类似于基本天气小部件的小部件。

我想在不让用户注意到的情况下刷新小部件的内容。

并且根据 Apple 文档 go to Updating Content 他们说:

To help your widget look up to date, the system occasionally captures snapshots of your widget’s view. When the widget becomes visible again, the most recent snapshot is displayed until the system replaces it with a live version of the view. To update a widget’s state before a snapshot is taken, be sure to conform to the NCWidgetProviding protocol.

所以我使用widgetPerformUpdate 来更新我的小部件内容

但发生的事情是应用程序显示来自 MainInterface.storboard 的“初始设计”,直到获取数据并更新屏幕,每次我向左向右滑动时,我都会获得“初始设计”,直到获得数据!

我的代码是:

func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {

    getWeatherInfo()

    completionHandler(NCUpdateResult.newData)
}

有人知道问题是什么以及如何解决吗?

谢谢。

最佳答案

你应该等待,先获取weatherInfo,然后在widgetPerformUpdate中启动completionHandler,我会在中添加一个完成 block >getWeatherInfo() 方法并按如下方式执行:

为 getWeatherInfo 方法添加一个 completionHandler

func getWeatherInfo(completion: (_ result: Bool) -> Void)

然后当你在 getWeatherInfo 方法中完成获取天气时调用完成 block ,在这里你可以指定新的天气数据是否可用,所以你可以做

completion(true) 如果成功接收到天气,然后您只需像这样重写 widgetPerformUpdate:

func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
    getWeatherInfo { didUpdate in
        completionHandler(.newData)
        //you can check didUpdate and if it is false return .noData
    }
}

关于ios - 通过 widgetPerformUpdate 刷新 Today Extension 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951806/

相关文章:

objective-c - 如何将附加参数传递给 ASIHTTPRequest didFinishSelector 选择器

ios - 什么iPhone设备将在armv7s和arm64上运行?

iphone - 通话中状态栏 HIG 指南问题

arrays - 将数据从阵列拉入开关阵列

ios - 将字体设置为响应 :#selector(setter:object. 字体的任何对象)

ios - 将键和值添加到 Firebase 中 JSON 树中的所有子节点

swift - 从 Today Extension 保存到 Core Data 时,只能从 Widget 访问数据 - 而不是从主应用程序

iOS:应用程序组缺少用户默认 key

iOS - 使用自动布局创建比例按钮、标签等