使用NSCoding存档UIImageView

我从来没有使用NSCoding,我很困惑如何实施。

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

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

我知道UIImageView符合NSCoding协议,但我不知道在哪里实现encodeWithCoder和initWithCoder。 我从我的主视图控制器调用这些吗? 我是否需要为UIImageView创build一个类别,使我可以重写这些方法?

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

我以为会有一个简单的方法来保存磁盘的一个对象,包括所有的属性,子视图等。似乎有很多事情需要做,以便我保存这个“背景”UIImageView并在以后恢复。 我努力想象我需要做的一切。 任何指针非常感谢!

序列化(也称为存档和非存档)实际上是相当复杂的,但Cocoa使其变得容易的程度是一个非常令人印象深刻的壮举。

一旦你设置了一些东西,使得UIImageView及其所有属性都符合NSCoding ,那么只需要保存对象就可以了:

 NSData *dataToSave = [NSKeyedArchiver archivedDataWithRootObject:yourImageView]; 

然后将NSData存储在某个地方。 然后,为了解开对象,

 UIImageView *restoredImageView = [NSKeyedUnarchiver unarchiveObjectWithData:dataToRestore]; 

从某处恢复NSData之后。

至于使所有的东西符合NSCoding, UIImageView符合NSCoding ,就像UIView ,所以在你的UIImageView ,它的子视图和它们的属性之间,除了实际的UIImage之外,一切都可能符合NSCoding 。 为此,如果你的谷歌你可以find很多的类别,使其符合NSCoding ,所以只要在你的项目中包括其中之一,你应该没问题。