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

Cli*_*lip 2 objective-c ios ios8-today-widget

我发现通知中心窗口小部件不经常重新加载。因此,将显示过期数据。每次打开“今日”视图时,我都无法找到一种使小部件刷新的方法。我看过诸如NBA Gametime之类的应用程序,每次我下拉查看小部件时都能够更新。

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

mor*_*tic 5

根据我自己的实验,并且还在此SO线程中进行报告,因此似乎TodayViewController.viewDidLoad()每次打开“今日/通知”区域时都会调用该函数。更具体地说,@ Karl Monaghan在评论中报告说,iOS 8.1发行说明的内容如下:

widgetPerformUpdateWithCompletionHandler:的时间表和预期用途旨在为所有数据/模型更新逻辑提供方便。如果实现,则系统将在通知中心可见时以及在后台时,在适当的时间调用窗口小部件以更新其状态。需要实现以启用后台更新。预期该小部件将执行工作以尽可能地异步更新并脱离主线程。

因此,回答您的问题:

  1. 我认为我们永远不会真正知道该widgetPerformUpdateWithCompletionHandler方法的调用频率,我认为苹果更喜欢这种方法
  2. viewDidLoad每次显示小部件时都会调用该函数,因此有可能您可以在该方法内部调用update函数。或者,您可以将所需的任何更新显示在该函数的小部件中,尽管我不知道会对应用程序性能产生何种影响。

希望这可以帮助。

更新资料

我还发现,每次在屏幕上显示窗口小部件时,都会调用之一,initWithCoder或者initWithNibName似乎会调用它,因此有可能您可以在这些文件中发出调用以更新窗口小部件,但是如果我没记错的话,视图实际上并没有在这个时候实例化,所以最好不要在这些函数中放置代码来更新小部件。