iPhone - 为什么文档说UIImageView符合NSCoding?

los*_*sit 12 iphone nscoding uiimageview

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

UIImageView类符合NSCoding.所以我不应该打扰如何使用NSKeyedArchiver和NSKeyedUnarchiver类对它进行序列化/反序列化.但每次我尝试编码UIImageView对象时,都会收到UIImage无法识别的错误:encodeWithCoder:method.

现在UIImageView内部使用UIImage对象.但编码是否应该自己处理?

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

有人可以帮我澄清一下!我很困惑!

Nat*_*ies 33

文档具有误导性 - 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
Run Code Online (Sandbox Code Playgroud)


Dou*_*ugW 8

这个问题值得更新,因为iOS 5.1为NSCoding添加了UIImage的功能,而Nathan de Vries的回答现在会引起最新编译器的警告.

如果您的应用支持5.1之前的iOS,此问题可提供解决此问题的解决方案.它与Nathan建议的基本相同,但检查方法是否已经存在,而不是硬编码.