我的应用程序的最低支持iOS版本是iOS5。我没有做任何状态保存和恢复。
它在我的自我iphone4上运行良好,但有些用户抱怨该应用程序在接听电话或更改为其他应用程序并返回时重置。
所以,我认为状态恢复更严重,我想将它添加到我的应用程序中。
但是,我有图像相册功能,所以我称之为ALAssetLibrary
我需要创建与原来完全相同的缩略图视图
我在operationQueue中有一些后台操作,所以我需要知道它们的状态并添加未完成的后台操作。这有点复杂。
这是我的问题。
1.我找不到有用的示例代码,项目。 (WWDC2012中的session208,但他们没有在WWDC示例代码版本中发布代码),你知道吗?
2.最好的方法是什么?按照iOS6或自己制作?
有什么区别。
3.对于ALAssetlibrary,图像缩略图查看,我如何实现状态保存和恢复?
答案 0 :(得分:2)
绝对使用Apple的API,不要重新发明轮子。 WWDC 2012 session about this使用WWDC 2012应用程序作为示例来展示该功能,从来没有任何演示项目可供开发人员共享。但是他们从那时起(最近)发布了一个演示来演示它,你可以在这里找到它:http://developer.apple.com/library/ios/#samplecode/StateRestore/Introduction/Intro.html
听起来你的状态很复杂,我不确定你是否真的想恢复那些后台操作。您可能会发现将用户恢复到应用程序中更稳定的部分会更好。
对于您的ALAssetlibrary问题,您可以将ID保存到视图控制器的encodeRestorableStateWithCoder:
实现中的当前图像,确保您阅读了文档,您需要遵守协议,设置一个恢复类,如果你在代码中或使用xibs(不使用故事板)...你会保存ID做这样的事情:
NSString * const ImageReferenceIDKey = @"ImageReferenceID";
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
NSString *objectID = nil; // get some ID that can relocate your image
[coder encodeObject:objectID forKey:ImageReferenceIDKey];
[super encodeRestorableStateWithCoder:coder];
}
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
[super decodeRestorableStateWithCoder:coder];
NSString *objectID = [coder objectForKey:ImageReferenceIDKey];
// get into the ALAssetlibrary and use the objectID to restore which image you had.
}
注意我在编码方法中最后调用super
,但首先在解码方法中调用。
您应该非常小心用户更改了对照片的访问权限,不要让它们崩溃,如果您尝试恢复照片,请确保您仍然有权这样做,否则您可能会崩溃