12

根据苹果关于widgetPerformUpdateWithCompletionHandler: 的说法,当widget 不可见时,iOs Widget 也可以更新他的内容。

在我的调试会话中,我注意到 todayViewController 每次通知中心视图消失时都会被释放,所以我的问题是:

如果我的 todayViewController 被释放,它如何响应 widgetPerfomrUpdateWithComplationHandler ?

我需要小部件每小时更新他的内容,如果它不可见,我该怎么做?

iOs 小部件的生命周期如何?

请帮助我:)谢谢

4

3 回答 3

18

小部件生命周期由 iOS 本身管理。

当您进入后台时,系统会为您今天的小部件拍摄快照。系统管理后台获取(小部件的后台生命周期),它会widgetPerfomrUpdateWithComplationHandler:尽可能地调用更新小部件数据并每次拍摄快照。当你再次打开它时,它会首先加载最新的快照,然后再加载实时数据。


小部件内容更新

更新内容

Today 扩展点提供了用于管理小部件状态和处理其内容更新的 API(您可以在通知中心框架参考中阅读有关此 API 的信息)。尽管 Today API 存在一些特定于平台的差异,但两个平台支持的功能基本相同。

为了帮助您的小部件保持最新状态,系统有时会捕获小部件视图的快照。当小部件再次可见时,将显示最近的快照,直到系统将其替换为视图的实时版本。

要在拍摄快照之前更新小部件的状态,请务必遵守 NCWidgetProviding 协议。当您的小部件收到 widgetPerformUpdateWithCompletionHandler: 调用时,使用最新内容更新小部件的视图并调用完成处理程序,使用以下常量之一来描述更新结果:

NCUpdateResultNewData——新内容需要你重新绘制视图

NCUpdateResultNoData— 小部件不需要更新

NCUpdateResultFailed——更新过程中出现错误

参考今日小工具


通知中心数据更新

通知中心

笔记

widgetPerformUpdateWithCompletionHandler: 的时间表和预期用途旨在作为所有数据/模型更新逻辑的方便之家。如果实施,系统将在适当的时候调用小部件以更新其状态,无论是在通知中心可见时还是在后台。需要一个实现来启用后台更新。预计小部件将执行异步更新工作并尽可能多地脱离主线程。当工作完成时,小部件应该调用参数块,传递适当的 NCUpdateResult。小部件不应阻止从 viewWillAppear: 返回此操作的结果。相反,小部件应该在 viewWillAppear: 中加载缓存状态,以匹配上一个 viewWillDisappear: 中的视图状态,

参考iOS 8.1 通知中心


小部件生命周期

小部件生命周期

参考:应用扩展的生命周期

于 2015-02-19T11:08:52.130 回答
4

iOS8 发行说明

注意 widgetPerformUpdateWithCompletionHandler: 的计划和预期用途旨在作为所有数据/模型更新逻辑的方便归宿。如果实施,系统将在适当的时候调用小部件以更新其状态,无论是在通知中心可见时还是在后台。需要一个实现来启用后台更新。预计小部件将执行异步更新工作并尽可能多地脱离主线程。当工作完成时,小部件应该调用参数块,传递适当的 NCUpdateResult。小部件不应阻止从 viewWillAppear: 返回此操作的结果。相反,小部件应该在 viewWillAppear: 中加载缓存状态,以匹配上一个 viewWillDisappear: 中的视图状态,

你需要同时实现

  • viewDidAppear:
  • 小部件PerformUpdateWithComplationHandler:

在 widgetPerformUpdateWithComplationHandler 中刷新您的数据:然后使用 NCUpdateResult 调用完成块。

在 viewDidAppear 中刷新您的视图:启动图像(快照)将来自您的上一个 viewDidDissappear:新内容将在下一个运行循环结束时显示。

归功于 DigitalBrain_Dev以获取文档参考。

于 2016-04-19T19:43:41.417 回答
-1

在 func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) 方法中调用您的 API 并调用 completionHandler(NCUpdateResult.newData) 。

于 2019-06-27T13:12:06.700 回答