我正在向一个新的 iOS 8 Today 小部件编写代码,但我注意到每次widgetPerformUpdateWithCompletionHandler:
调用我的 ivars(创建自@property
)都会重置。就像每次实例化一个新的视图控制器一样。
这使得在对小部件的更新之间无法将数据保存在内存中(例如,当它在后台并被调用以更新其内容时)。
这是正常行为还是错误?我应该将简单的数字保存到NSUserDefaults
而不是依赖正在重置的基于内存的数据吗?
我正在向一个新的 iOS 8 Today 小部件编写代码,但我注意到每次widgetPerformUpdateWithCompletionHandler:
调用我的 ivars(创建自@property
)都会重置。就像每次实例化一个新的视图控制器一样。
这使得在对小部件的更新之间无法将数据保存在内存中(例如,当它在后台并被调用以更新其内容时)。
这是正常行为还是错误?我应该将简单的数字保存到NSUserDefaults
而不是依赖正在重置的基于内存的数据吗?
您的分机不会在两次呼叫之间运行widgetPerformUpdateWithCompletionHandler:
。当 iOS 在后台启动您的扩展程序以获取新数据时,将调用该方法。然后,操作系统会捕获您的扩展程序的图像(这就是完成处理程序的用途),以显示为您的扩展程序的一种“启动屏幕”(当通知中心启动时,您的扩展程序无法立即使用,因此它会显示图像直到这是)。NSUserDefaults
在等待来自服务器的更新数据时,您可能希望使用(或其他方法)存储要加载的缓存数据。
换句话说,操作系统会定期启动您的应用程序以让您获取新数据,以便用户始终在通知中心看到更新的数据。您应该在该方法中缓存此数据,以便在为通知中心启动扩展程序时可以更快地加载扩展程序。这都在这里讨论。