在理想情况下的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

其他提示

这个问题值得更新的iOS以来5.1新增功能为NSCoding到UIImage的,拿德弗里斯答案现在将导致与最新的编译器警告。

这个问题提供了一个解决方案,如果您的应用程序来解决这个问题支援iOS之前5.1。它基本上森表明同样的事情,但检查是否已经方法存在与否,而不是硬编码它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top