【问题标题】:Archiving UIView Object which holds UIImageView and UIImage as a subview of it in Objective-C归档 UIView 对象,它在 Objective-C 中将 UIImageView 和 UIImage 作为它的子视图
【发布时间】:2012-02-02 01:42:30
【问题描述】:

我如何归档具有 UIImagView 和 UIImage 作为其子视图的 UIVIew。 我试着用这种方式做,

data= [NSKeyedArchiver archivedDataWithRootObject: viewObject];
new_ViewObject= [NSKeyedUnarchiver unarchiveObjectWithData: data];

但是程序崩溃说 [UIImage encodeWithCoder:]:Unrecognized selector sent to instance。

我该如何解决这个问题?如何在 Objective-C 中归档和取消归档这个 UIView 对象?

谢谢你。

【问题讨论】:

    标签: objective-c uiview uiimageview uiimage archive


    【解决方案1】:

    UIView 实现了 NSCoding 协议,因此您可以使用 encodeWithCoder: 来获取序列化的表示,并使用 initWithCoder: 从这样的表示中重构 UIView。你可以在Serializations Programming Guide for 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 {
      NSKeyedArchiver  *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    
       UIView *view = [unarchiver decodeObjectForKey:@"view"];
      [unarchiver finishDecoding];
      [unarchiver release];
    
      return view;
    }
    

    请注意,如果我实际使用的是 UIView 的自定义子类,您需要覆盖 encodeWithCoder: 和 initWithCoder: 以添加您自己的属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多