iPhone - 为什么文件说的UIImageView是NSCoding兼容?
-
21-08-2019 - |
题
在理想情况下的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。它基本上森表明同样的事情,但检查是否已经方法存在与否,而不是硬编码它。
不隶属于 StackOverflow