如何频繁更新通知中心的今天小部件?

我发现我的通知中心小部件不会经常刷新。 正因为如此,过时的数据正在呈现。 每次打开“今日”视图时,我都无法find让小部件刷新的方法。 我已经看到了像NBA Gametime这样的应用程序,每当我下拉菜单去查看这个小部件的时候,它都能够进行更新。

如何在我的应用程序中获得此function?

基于我自己的实验,并在这个SO线程中报告,看起来TodayViewController.viewDidLoad()函数每次打开Today / Notifications区域时都会被调用。 更具体地说, @Karl Monaghan在评论中报道说,iOS 8.1发行说明有如下的说法:

widgetPerformUpdateWithCompletionHandler的计划和预期用途:旨在作为所有数据/模型更新逻辑的便利之处。 如果实施, 系统将在适当的时候调用小部件来更新其状态 ,无论是在通知中心可见的时候,还是在后台。 需要一个实现来启用后台更新。 希望小部件能够尽可能地执行asynchronous更新和主线程更新的工作。

所以,要回答你的问题:

  1. 我不认为我们真的知道widgetPerformUpdateWithCompletionHandler方法被调用的widgetPerformUpdateWithCompletionHandler ,我认为苹果公司更喜欢这种方式
  2. 每次显示小部件时, viewDidLoad函数都会被调用,因此可能会在该方法内部调用更新函数。 或者,您可以将任何需要更新的内容显示在该function的小部件中,但我不知道对应用性能会有什么样的影响。

希望这可以帮助。

更新

我还发现, initWithCoderinitWithNibName中的任何一个似乎都会在屏幕上显示小部件时被调用,所以可能会将调用更新到这些文件中,但是如果我正确地记得这个视图是目前没有真正实例化,所以最好不要把你的代码更新到这些函数中。

在你的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); }