如何频繁更新通知中心的今天小部件?
我发现我的通知中心小部件不会经常刷新。 正因为如此,过时的数据正在呈现。 每次打开“今日”视图时,我都无法find让小部件刷新的方法。 我已经看到了像NBA Gametime这样的应用程序,每当我下拉菜单去查看这个小部件的时候,它都能够进行更新。
如何在我的应用程序中获得此function?
基于我自己的实验,并在这个SO线程中报告,看起来TodayViewController.viewDidLoad()
函数每次打开Today / Notifications区域时都会被调用。 更具体地说, @Karl Monaghan在评论中报道说,iOS 8.1发行说明有如下的说法:
widgetPerformUpdateWithCompletionHandler的计划和预期用途:旨在作为所有数据/模型更新逻辑的便利之处。 如果实施, 系统将在适当的时候调用小部件来更新其状态 ,无论是在通知中心可见的时候,还是在后台。 需要一个实现来启用后台更新。 希望小部件能够尽可能地执行asynchronous更新和主线程更新的工作。
所以,要回答你的问题:
- 我不认为我们真的知道
widgetPerformUpdateWithCompletionHandler
方法被调用的widgetPerformUpdateWithCompletionHandler
,我认为苹果公司更喜欢这种方式 - 每次显示小部件时,
viewDidLoad
函数都会被调用,因此可能会在该方法内部调用更新函数。 或者,您可以将任何需要更新的内容显示在该function的小部件中,但我不知道对应用性能会有什么样的影响。
希望这可以帮助。
更新
我还发现, initWithCoder
或initWithNibName
中的任何一个似乎都会在屏幕上显示小部件时被调用,所以可能会将调用更新到这些文件中,但是如果我正确地记得这个视图是目前没有真正实例化,所以最好不要把你的代码更新到这些函数中。
在你的widgetPerformUpdateWithCompletionHandler
你需要让你的小部件知道它需要更新。 苹果文件
-(void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { // Perform any setup necessary in order to update the view. // If an error is encoutered, use NCUpdateResultFailed // If there's no update required, use NCUpdateResultNoData // If there's an update, use NCUpdateResultNewData completionHandler(NCUpdateResultNewData); }