理想情况下,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/