【问题标题】:Archiving UIImageView with NSCoding使用 NSCoding 归档 UIImageView
【发布时间】:2012-03-06 02:34:06
【问题描述】:

我以前从未使用过 NSCoding,我对它应该如何实现感到非常困惑。

我当前的 iPad 应用程序有一个 UIImageView(称为“背景”),它是我的主视图控制器的一个属性。 “背景”有一个 UIImage 的“图像”属性(显然)和用户添加的各种子视图。添加的子视图是我自己自定义的 UIImageView 子类。

我需要能够保存“背景”UIImageView 的状态,以便可以使用相同的图像和所有子视图在存档时恢复它。

我了解 UIImageView 符合 NSCoding 协议,但我不确定在哪里实现 encodeWithCoder 和 initWithCoder。我是否从我的主视图控制器调用这些?我是否需要为 UIImageView 创建一个类别以允许我覆盖这些方法?

我是否需要编写代码来归档我的“背景”UIImageView 及其子视图的每个属性?我在 SO 的其他地方读到 UIImage 不符合 NSCoding 因此需要子类化或添加类别才能存档 UIImageView。

我认为有一种简单的方法可以将一个对象(包括其所有属性、子视图等)保存到磁盘。看来我需要做很多事情才能保存这个“背景”UIImageView 并在以后恢复它.我正在努力想象我需要做的一切。任何指针都非常感谢!

【问题讨论】:

    标签: ios ipad uiimageview nskeyedarchiver nscoding


    【解决方案1】:

    序列化(又名归档和取消归档)实际上相当复杂,但 Cocoa 将其简化的程度令人印象深刻。

    一旦您设置好 UIImageView 及其所有要保留的属性符合NSCoding,那么您所要做的就是保存该对象:

    NSData *dataToSave = [NSKeyedArchiver archivedDataWithRootObject:yourImageView];
    

    然后将该 NSData 存储在某处。然后,要取消归档对象,

    UIImageView *restoredImageView = [NSKeyedUnarchiver unarchiveObjectWithData:dataToRestore];
    

    从某处恢复 NSData 之后。

    至于使一切都符合 NSCoding,UIImageView 符合 NSCodingUIView 也是如此,所以在您的 UIImageView、它的子视图和它们的属性之间,一切都可能符合 NSCoding,除了实际UIImage。为此,如果您在 Google 上搜索,您会发现人们为使其符合 NSCoding 而创建的许多类别,因此只需将其中一个包含在您的项目中就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2013-05-25
      • 2018-02-04
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多