将NSMutuableArray保存到NSUserDefault会发出警告

时间:2013-02-27 19:09:39

标签: objective-c

我有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关心我的数组包含哪些对象?

1 个答案:

答案 0 :(得分:4)

来自NSUserDefaults的文档:

  

NSUserDefaults类提供了访问常用类型(如浮点数,双精度数,整数,布尔值和URL)的便捷方法。默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。有关更多详细信息,请参阅“首选项和设置编程指南”。

您会注意到UIImage不在列表中。您必须先将UIImage转换为NSData对象,然后才能将图像存储在NSUserDefaults中。

但是,您不应使用NSUserDefaults来存储大量二进制数据。而是将图像写入文件系统。将它们存储在应用程序沙箱中的相应文件夹中。如果需要,您可以将文件名存储在NSUserDefaults中。