今天扩展Ivars不断重置?

时间:2014-10-09 02:14:55

标签: ios cocoa-touch ios8 ios8-extension ios8-today-widget

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

这使得无法在窗口小部件的更新之间保存内存上的数据(例如,它在后台,并且被调用以更新其内容)。

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

1 个答案:

答案 0 :(得分:0)

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

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