2

我正在向一个新的 iOS 8 Today 小部件编写代码,但我注意到每次widgetPerformUpdateWithCompletionHandler:调用我的 ivars(创建自@property)都会重置。就像每次实例化一个新的视图控制器一样。

这使得在对小部件的更新之间无法将数据保存在内存中(例如,当它在后台并被调用以更新其内容时)。

这是正常行为还是错误?我应该将简单的数字保存到NSUserDefaults而不是依赖正在重置的基于内存的数据吗?

4

1 回答 1

0

您的分机不会在两次呼叫之间运行widgetPerformUpdateWithCompletionHandler:。当 iOS 在后台启动您的扩展程序以获取新数据时,将调用该方法。然后,操作系统会捕获您的扩展程序的图像(这就是完成处理程序的用途),以显示为您的扩展程序的一种“启动屏幕”(当通知中心启动时,您的扩展程序无法立即使用,因此它会显示图像直到这是)。NSUserDefaults在等待来自服务器的更新数据时,您可能希望使用(或其他方法)存储要加载的缓存数据。

换句话说,操作系统会定期启动您的应用程序以让您获取新数据,以便用户始终在通知中心看到更新的数据。您应该在该方法中缓存此数据,以便在为通知中心启动扩展程序时可以更快地加载扩展程序。这都在这里讨论。

于 2014-10-09T19:16:36.880 回答