Ios 如何在通知中心频繁更新“今日”窗口小部件?

Ios 如何在通知中心频繁更新“今日”窗口小部件?,ios,objective-c,ios8-today-widget,Ios,Objective C,Ios8 Today Widget,我发现我的NotificationCenter小部件不经常重新加载。因此,将显示过时的数据。每次打开“今日”视图时,我都无法找到让小部件刷新的方法。我看到过像NBA Gametime这样的应用程序,它们可以在我每次下拉查看小部件时更新 如何在我的应用程序中获得此功能?在您的WidgetPerformUpdate WithCompletionHandler中,您需要让您的小部件知道它需要更新 根据我自己的实验和中的报告,似乎每次打开“今日/通知”区域时都会调用TodayViewController

我发现我的NotificationCenter小部件不经常重新加载。因此,将显示过时的数据。每次打开“今日”视图时,我都无法找到让小部件刷新的方法。我看到过像NBA Gametime这样的应用程序,它们可以在我每次下拉查看小部件时更新


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

在您的
WidgetPerformUpdate WithCompletionHandler
中,您需要让您的小部件知道它需要更新


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

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

所以,要回答你的问题:

  • 我不认为我们真的知道调用
    widgetPerformUpdateWithCompletionHandler
    方法的频率,我认为苹果更喜欢这样
  • 每次显示小部件时都会调用
    viewDidLoad
    函数,因此您可以在该方法中调用update函数。或者你可以把你需要显示的任何更新放在该功能的小部件中,尽管我不知道这会对应用程序性能产生什么样的影响
  • 希望这有帮助

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

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