2

我的应用程序的最低支持 iOS 版本是 iOS5。而且我没有进行任何状态保存和恢复。它在我自己的 iphone4 上运行良好,但一些用户抱怨当他们接听电话或切换到其他应用程序并返回时应用程序被重置。
所以,我更重视状态恢复,我想将它添加到我的应用程序中。但是,我有相册功能,所以我调用了 ALAssetLibrary。
我需要创建与原来完全相同的缩略图视图。
我在 operationQueue 中有一些后台操作,所以我需要知道它们的状态并添加未完成的后台操作。这有点复杂。这是我的问题。
1.我没有找到有用的示例代码,项目。(WWDC2012中的session208,但是他们没有在WWDC示例代码发布中发布代码),你知道吗?
2. 最好的方法是什么?跟随iOS6还是自己做?
有什么不同。
3. ALAssetlibrary,图片缩略图查看,如何实现状态保存和恢复?

4

1 回答 1

2

绝对使用 Apple 的 API,不要重新发明轮子。WWDC 2012 上关于此的会议使用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.
}

请注意,我在 encode 方法中调用superlast,但在 decode 方法中首先调用。

您应该非常小心用户更改了您访问他们照片的隐私,不要让他们崩溃,如果您尝试恢复照片,请确保您仍然拥有这样做的权限,否则您可能会崩溃。

于 2013-05-06T19:19:13.983 回答