iPhone - 用户默认值和UIImages

Sta*_*ros 2 iphone cocoa-touch nsuserdefaults uiimage

我过去几个月一直在开发iPhone应用程序.最近我想提升性能并缓存UI中使用的一些图像.用户从网上随机下载图像,因此我无法将特定图像添加到项目中.我也已经在使用NSUserDefaults来保存应用程序中的其他信息.

所以现在我试图将UIImages的字典保存到我的NSUserDefaults对象中并得到...

- [UIImage encodeWithCoder:]:发送到实例的无法识别的选择器

然后我决定使用名为UISaveableImage的类继承UIImage并实现NSCoding.所以现在我......

@implementation UISaveableImage

-(void)encodeWithCoder:(NSCoder *)encoder
{
   [encoder encodeObject:super forKey:@"image"];
}

-(id)initWithCoder:(NSCoder *)decoder
{
    if (self=[super init]){
        super =  [decoder decodeObjectForKey:@"image"];
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

这并不比我开始时更好.如果我能够将UIImage转换为NSData我会很好,但我能找到的功能就像UIImagePNGRepresentation,它要求我知道这是什么类型的图像.UIImage不允许我做的事情.思考?我觉得我可能走错了路......

Ben*_*ieb 6

您不希望在NSUserDefaults中存储图像.它们是大量数据,NSUserDefaults存储为plist; 你想写一小部分信息.

您应该将映像写入磁盘,然后将文件名存储为默认值:

NSString   *filename = myImageFilename;
[UIImagePNGRepresentation(image) writeToFile: myImageFilename atomically];
[[NSUserDefaults standardDefaults] setObject: myImageFilename forKey: @"lastImageFilename"]; 
Run Code Online (Sandbox Code Playgroud)