gpt4 book ai didi

ios - 在 iPhone 应用程序中保存图片

转载 作者:行者123 更新时间:2023-11-28 19:20:36 25 4
gpt4 key购买 nike

我有一个包含对象数组的应用程序,我将其存档和取消存档

-(id)initWithCoder:(NSCoder *)aDecoder{
title = [aDecoder decodeObjectForKey:@"Title"];
image = [aDecoder decodeObjectForKey:@"Image"];
return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:title forKey:@"Title"];
[aCoder encodeObject:image forKey:@"Image"];
}

UIImage 可以这样存储吗?

最佳答案

不,UIImage 不符合 NSCoding 协议(protocol)。

要保存图像,请使用 UIImageJPEGRepresentation(image, quality)UIImagePNGRepresentation(image) 将其转换为 NSData,然后您可以在编码器中保存 NSData 对象,因为它确实符合 NSCoding。

像这样:

-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super init])){
title = [aDecoder decodeObjectForKey:@"Title"];
image = [UIImage imageWithData:[aDecoder decodeObjectForKey:@"ImageData"]];
}
return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:title forKey:@"Title"];
[aCoder encodeObject:UIImagePNGRepresentation(image) forKey:@"ImageData"];
}

PS,我假设您使用的是 ARC?如果不是,则需要保留 initWithCoder 方法中的值,因为 decodeObjectForKey: 返回一个自动释放的对象。我还重写了您的 initWithCoder 以包括正常的 super/nil 检查,这是最佳实践。

请注意,您可能希望使用 self = [self init]self = [super initWithCoder:aDecoder] 而不是 self = [super init] ,这取决于您的父类(super class)是什么以及您的 init 是否进行任何其他设置。

关于ios - 在 iPhone 应用程序中保存图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174135/

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