gpt4 book ai didi

ios - Unarchive UIImage 对象在 iOS 8 上使用 NSKeyedUnarchiver 返回 CGSizeZero 图像

转载 作者:可可西里 更新时间:2023-11-01 04:29:24 25 4
gpt4 key购买 nike

我的代码在 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 header 是这样的:

UIImage : NSObject <NSSecureCoding, NSCoding>

但在 iOS 8 上是:

UIImage : NSObject <NSSecureCoding>

看起来 iOS 8 上缺少 NSCoding 协议(protocol)。我必须对实际图像数据进行编码:UIImagePNGRepresentation(self.imageView.image) 而不是图像以确保我获得良好的形象。

有人知道为什么会这样吗?是为了向后兼容吗?我注意到在 iOS 早期版本中 UIImage 不符合 NSCoding

最佳答案

UIImage : NSObject <NSSecureCoding>这不是问题,因为 NSSecureCoding继承NSCoding .

无论如何,我确认问题可以通过以下代码重现:

UIImage *img = [UIImage imageNamed: @"myImage"];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img];
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> (null), {0, 0}

另一方面,以下代码按预期工作:

UIImage *img = [UIImage imageNamed: @"myImage"];
UIImage *img2 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:img.imageOrientation];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img2];
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> <UIImage: 0x7fa013e766f0>, {50, 53}

不知道为什么,可能是bug?

我认为,这与imageAsset有关或 traitCollection iOS8中引入的属性

关于ios - Unarchive UIImage 对象在 iOS 8 上使用 NSKeyedUnarchiver 返回 CGSizeZero 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26213575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com