我使用ASIHTTPRequest库来下载图片,我将我的图片存储在NSMutableDictionnary(key = url,value = UIImage)中,这允许我下载我的每个视图所需的图片一次。这部分效果很好。
现在我想在iPhone内存中存储名为“imagesDownloaded”的NSMutableDictionnary,为我的所有应用程序下载一次每个图像,感谢这段代码
UIImage *img = [[UIImage alloc] initWithData:[request responseData]];
[imagesDownloaded setValue:img forKey:request.url.description];
userDatas = [NSUserDefaults standardUserDefaults];
[userDatas setValue:imagesDownloaded forKey:@"Pictures"];
[userDatas synchronize];
但是当我这样做时它不起作用:
NSLog(@"%@", [userDatas objectForKey:@"Pictures"]);
值始终为“null”。
怎么了?
由于
答案 0 :(得分:1)
正如其他人所说,您无法将图像直接保存到NSUserDefaults
。
虽然您可以将其保存为编码字符串或其他可以保存在NSUserDefaults
中的字符串,但由于图像数据比普通NSUserDefaults
数据大得多,因此如果性能不佳将图像保存到其中。
最好的方法是将图像作为文件保存到iOS的文件系统中,然后只需将图像的路径保存到NSUserDefaults
。
答案 1 :(得分:0)
您无法将图像直接存储到NSUserDefaults
中。来自the documentation:
NSUserDefaults
类提供了便于访问的方法 常见类型,例如浮点数,双精度数,整数,布尔值和URL。一个 默认对象必须是属性列表,即(或 对于集合的实例组合:NSData
,NSString
,NSNumber
,NSDate
,NSArray
或NSDictionary
。如果你想存储任何 在其他类型的对象中,通常应将其存档以创建NSData
的实例。
由于您已拥有图像数据([request responseData]
),请尝试将其存储为默认值。您也可以尝试将NSData
对象直接放入数组而不是UIImage
个对象,然后存储它。
要了解有关使用用户默认值的详情,请查看Apple的User Defaults Programming Topics
答案 2 :(得分:0)
您要存储到用户默认值(及其所有子节点)的对象必须是plist类型的对象,或者换句话说,NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。
我最近做了类似的事情,其中包含这样的代码来存储项目:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:appSettings];
[prefs setObject:myEncodedObject forKey:@"appSettings"];
[prefs synchronize];
我的appSettings类要求我创建encodeWithCoder和initWithCoder方法,但是一旦我这样做,我就可以将该类放入用户默认值。