使用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
,所以只要在你的项目中包括其中之一,你应该没问题。