理想情况下,NSCoding 兼容类将按预期使用 encodeWithCoder: 和 initWithCoder:(至少直到最近我是这么认为的)而开发人员不必担心例程内部发生的事情(除非我对 NSCoding 兼容类的想法完全搞砸了) !)

UIImageView 类是 NSCoding 兼容的。因此,我不必担心如何使用 NSKeyedArchiver 和 NSKeyedUnarchiver 类对其进行序列化/反序列化。但是每次我尝试对 UIImageView 对象进行编码时,都会收到一个错误,即 UIImage 无法识别 encodeWithCoder: 方法。

现在 UIImageView 在内部使用一个 UIImage 对象。但是编码不应该自己处理吗?

或者文档中指定的 NSCoding 合规性只是让用户知道他们可以实现 initWithCoder 和 encodeWithCoder 方法?

有人可以为我澄清这一点!我彻底糊涂了!

最佳答案

该文档具有误导性 - UIImage 与您所说的 NSCoding 不符。您可以通过自己完成工作来解决它(以原始方式):

@interface UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)encoder;
@end

@implementation UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder {
  NSData *pngData = [decoder decodeObjectForKey:@"PNGRepresentation"];
  [self autorelease];
  self = [[UIImage alloc] initWithData:pngData];
  return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:UIImagePNGRepresentation(self) forKey:@"PNGRepresentation"];
}
@end

关于iPhone - 为什么文档说 UIImageView 是 NSCoding 兼容的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1072700/

10-14 21:18