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的文档参考。