如何序列化UIView?

8 iphone serialization objective-c uiview

是否可以序列化UIView对象?如果是,我该怎么做?

Lou*_*arg 12

UIView实现NSCoding协议,因此您可以使用encodeWithCoder:获取序列化表示,并从这样的表示initWithCoder:重构UIView.您可以在Cocoa序列化编程指南中找到很多细节.

以下是如何执行此操作的快速示例:

- (NSData *)dataForView:(UIView *)view {
  NSMutableData *data = [NSMutableData data];
  NSKeyedArchiver  *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
  [archiver encodeObject:view forKey:@"view"];
  [archiver finishEncoding];
  [archiver release];

  return (id)data;
}

- (UIView *)viewForData:(NSData *)data {
  NSKeyedUnarchiver  *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

  UIView *view = [unarchiver decodeObjectForKey:@"view"];
  [unarchiver finishDecoding];
  [unarchiver release];

  return view;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是"NSKeyedUnarchiver*unarchiver"而不是"NSKeyedArchiver*unarchiver".虽然他们都是NSCoding的后裔,但他们不是一回事.它仍然"有效",但保姆XCode唠叨,正如她应该,在其他不那么微不足道的情况下. (4认同)
  • 请注意,如果您实际使用的是UIView的自定义子类,则需要覆盖encodeWithCoder:和initWithCoder:以添加您自己的属性. (3认同)