我发现我的通知中心小部件不会经常重新加载。因此,所提供的数据已过时。我无法找到一种方法让小部件在每次打开“今日”视图时刷新。我见过诸如 NBA Gametime 之类的应用程序,每次我下拉查看小部件时它们都会更新。
如何在我的应用程序中获得此功能?
根据我自己的实验以及报告这个所以线程 https://stackoverflow.com/questions/25168950/what-is-the-purpose-of-widgetperformupdatewithcompletionhandler-in-ios-8-today-w,看来TodayViewController.viewDidLoad()
每次打开今日/通知区域时都会调用该函数。进一步来说,@卡尔莫纳汉 https://stackoverflow.com/users/806442/karl-monaghan据评论称,iOS 8.1 发行说明中有以下内容:
widgetPerformUpdateWithCompletionHandler: 的时间表和预期用途旨在作为所有数据/模型更新逻辑的方便之家。如果实施的话,系统将在适当的时候调用小部件来更新其状态,无论是在通知中心可见时还是在后台时。需要实施来启用后台更新。预计小部件将执行异步更新工作并尽可能脱离主线程。
所以,回答你的问题:
- 我认为我们永远不会真正知道
widgetPerformUpdateWithCompletionHandler
方法被调用,我认为苹果更喜欢这种方式
- The
viewDidLoad
每次显示小部件时都会调用该函数,因此您可以在该方法内部调用更新函数。或者,您可以将需要在该函数内部的小部件中显示的任何更新放入该函数中,尽管我不知道这会对应用程序性能产生什么样的影响。
希望这可以帮助。
Update
我还发现其中之一initWithCoder
or initWithNibName
似乎每次小部件显示在屏幕上时都会被调用,因此您可以在这些文件中调用来更新小部件,但如果我没记错的话,此时视图实际上并未实例化,因此最好不要放置您的代码在这些函数中更新您的小部件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)