【问题标题】:How to frequently update today widget in notification center?如何在通知中心频繁更新今日小部件?
【发布时间】:2015-05-03 01:54:14
【问题描述】:

我发现我的通知中心小部件不会经常重新加载。正因为如此,提供了过时的数据。每次打开“今天”视图时,我都无法找到让小部件刷新的方法。我见过诸如 NBA Gametime 之类的应用程序,每次我下拉查看小部件时都能更新。

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

【问题讨论】:

    标签: ios objective-c ios8-today-widget


    【解决方案1】:

    根据我自己的实验以及this SO thread 中的报告,似乎每次打开今日/通知区域时都会调用TodayViewController.viewDidLoad() 函数。更具体地说,@Karl Monaghan 在评论中报告说 iOS 8.1 发行说明有以下内容:

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

    所以,回答你的问题:

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

    希望这会有所帮助。

    更新

    我还发现 initWithCoderinitWithNibName 中的任何一个似乎都会在每次小部件显示在屏幕上时被调用,因此您可以在这些文件中调用更新小部件,但是如果我没记错的话,此时视图实际上并没有被实例化,所以最好不要把你的代码更新到这些函数中。

    【讨论】:

      【解决方案2】:

      在您的widgetPerformUpdateWithCompletionHandler 中,您需要让您的小部件知道它需要更新。 Apple Docs

      -(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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        相关资源
        最近更新 更多