iOs小工具后台更新

根据苹果关于widgetPerformUpdateWithCompletionHandler的说法,iOs Widget也可以在小部件不可见时更新他的内容。

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

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

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

iOs小部件生命周期如何?

请帮助我:)谢谢

小部件生命周期由iOS自己pipe理。

当您进入后台时,系统会为您的当前小工具创build一个快照。 系统pipe理后台获取(widget的后台生命周期),它会调用widgetPerfomrUpdateWithComplationHandler:尽可能地更新你的widget数据,并且每次都拍摄一个快照。 而当你再次打开它时,它将首先加载最近的快照,然后加载实时数据。


小部件内容更新

更新内容

“今日”扩展点提供了用于pipe理窗口小部件状态并处理其内容更新的API(您可以在“通知中心框架参考”中阅读有关此API的信息)。 虽然在Today API中有几个特定于平台的差异,但两个平台上支持的function基本相同。

为了帮助您的小部件更新,系统偶尔会捕获小部件视图的快照。 当小部件再次可见时,将显示最近的快照,直到系统将其replace为视图的实时版本。

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

NCUpdateResultNewData – 新内容需要重绘视图

NCUpdateResultNoData – 小部件不需要更新

NCUpdateResultFailed – 更新过程中发生错误

参考今天的小部件


通知中心数据更新

通知中心

注意

widgetPerformUpdateWithCompletionHandler的计划和预期用途:旨在作为所有数据/模型更新逻辑的便利之处。 如果实施,系统将在适当的时候调用小部件来更新其状态,无论是在通知中心可见的时候,还是在后台。 需要一个实现来启用后台更新。 希望小部件能够尽可能地执行asynchronous更新和主线程更新的工作。 工作完成后,小部件应该调用参数块,传递适当的NCUpdateResult。 小部件不应该阻止从viewWillAppear返回:在这个操作的结果。 相反,小部件应该在viewWillAppear中加载caching状态:为了匹配最后一个viewWillDisappear的视图状态,然后在到达时顺利地过渡到新数据。

参考iOS 8.1通知中心


小工具生命周期

小工具生命周期

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

iOS8发行说明

注:widgetPerformUpdateWithCompletionHandler:的计划和预期用途旨在作为所有数据/模型更新逻辑的便利主页。 如果实施,系统将在适当的时候调用小部件来更新其状态,无论是在通知中心可见的时候,还是在后台。 需要一个实现来启用后台更新。 希望小部件能够尽可能地执行asynchronous更新和主线程更新的工作。 工作完成后,小部件应该调用参数块,传递适当的NCUpdateResult。 小部件不应该阻止从viewWillAppear返回:在这个操作的结果。 相反,小部件应该在viewWillAppear中加载caching状态:为了匹配最后一个viewWillDisappear的视图状态,然后在到达时顺利地过渡到新数据。

你需要实现两者

  • viewDidAppear:
  • widgetPerformUpdateWithComplationHandler:

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

在viewDidAppear中刷新视图:启动图像(快照)将从您的最后一个viewDidDissappear:新的内容将显示在下一个运行循环的末尾。

感谢DigitalBrain_Dev的文档参考。