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

时间:2009-07-02 05:48:55

标签: iphone uiimageview nscoding

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

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

现在UIImageView内部使用UIImage对象。但编码是否应该自己解决这个问题呢?

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:8)

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

如果您的应用支持5.1之前的iOS,请

This question offers a solution解决此问题。它与Nathan建议的基本相同,但检查方法是否已经存在,而不是硬编码。