我有NSMutuableArray
个UIImages。当我试图将他保存到userDefaults
时,我会收到警告。
如果它是一个字符串数组,它的工作正常。
//save to memory
NSMutableArray *savedImages=[[NSMutableArray alloc]init];
for(int j=0;j<[selectedButtonsTags count];j++)
[savedImages addObject:[assets objectAtIndex:[[selectedButtonsTags objectAtIndex:j] intValue]]];
[memoryInstance setTempImagesToSend:savedImages]; //here save to NSUserDefault
[savedImages release];
警告:
[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value
为什么userdefault关心我的数组包含哪些对象?
答案 0 :(得分:4)
来自NSUserDefaults
的文档:
NSUserDefaults类提供了访问常用类型(如浮点数,双精度数,整数,布尔值和URL)的便捷方法。默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。有关更多详细信息,请参阅“首选项和设置编程指南”。
您会注意到UIImage
不在列表中。您必须先将UIImage
转换为NSData
对象,然后才能将图像存储在NSUserDefaults
中。
但是,您不应使用NSUserDefaults
来存储大量二进制数据。而是将图像写入文件系统。将它们存储在应用程序沙箱中的相应文件夹中。如果需要,您可以将文件名存储在NSUserDefaults
中。