【发布时间】:2014-10-06 09:39:55
【问题描述】:
我有这段代码在 iOS 7 上运行:
NSData *imageData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView.image];
UIImage *imageCopy = [NSKeyedUnarchiver unarchiveObjectWithData:imageData];
NSLog(@"%@",NSStringFromCGSize(imageCopy.size));
但在 iOS 8 上,imageCopy 的大小始终为零。当我存档UIImageView 时也会发生同样的事情,未存档的imageView 的图像大小为零。我发现在 iOS 7 中,UIImage 标头是这样的:
UIImage : NSObject <NSSecureCoding, NSCoding>
但在 iOS 8 上是:
UIImage : NSObject <NSSecureCoding>
iOS 8 上似乎缺少 NSCoding 协议。我必须对实际图像数据进行编码:UIImagePNGRepresentation(self.imageView.image) 而不是图像,以确保我得到一个好的图像。
有人知道为什么会这样吗?是为了向后兼容吗?我注意到在 iOS 早期版本中 UIImage 不符合 NSCoding。
【问题讨论】:
-
至少对我来说,这段代码在 iOS8/Xcode6 上运行良好。我只为 nil 的图像得到 {0, 0},对于所有其他图像,我得到 {640, 640} 等
-
不适合我,我在 iOS8 上使用 Xcode6 版本 6.0.1,你呢?
-
版本 6.0.1 (6A317) 并在 iPhone 5s 上试用。
-
在 xcode 6.4 上有同样的问题。下面的解决方案有效
标签: ios objective-c xcode uiimage ios8