使用NSCoding存档UIImageView

时间:2012-02-14 17:50:22

标签: ios ipad uiimageview nskeyedarchiver nscoding

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

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

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

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

我是否需要编写代码来存档我的“背景”UIImageView及其子视图的每个属性?我已经在其他地方看过,UIImage不符合NSCoding,因此需要进行子类化或添加类别以便能够存档UIImageView。

我认为有一种简单的方法可以将一个对象保存到磁盘,包括它的所有属性,子视图等。为了让我保存这个“背景”UIImageView并在以后恢复它,似乎需要做很多事情。 。我正在努力想象我需要做的一切。任何指针都非常赞赏!

1 个答案:

答案 0 :(得分:4)

序列化(又名归档和取消归档)实际上非常复杂,但Cocoa使其变得容易的程度是一个令人印象深刻的壮举。

一旦你进行了设置,以便你想要保持UIImageView及其所有属性符合NSCoding,那么你需要做的就是保存对象:

NSData *dataToSave = [NSKeyedArchiver archivedDataWithRootObject:yourImageView];

然后将NSData存储在某个地方。然后,取消归档对象,

UIImageView *restoredImageView = [NSKeyedUnarchiver unarchiveObjectWithData:dataToRestore];

从某处恢复NSData后。

至于使所有内容符合NSCoding,UIImageView符合NSCodingUIView符合UIImageView,其NSCoding,其子视图及其属性,一切都可能符合UIImage,但实际NSCoding除外。为此,如果你谷歌你可以找到许多类别,使其符合{{1}},所以只需在项目中包含其中一个,你应该没事。