如何将数组保存到NSUserDefaults?
我有以下代码尝试存储NSURL数组
NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS];
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
[defs setObject:temp forKey:@"URLs"];
但我收到警告
- [NSUserDefaults setObject:forKey:]:尝试插入非属性值
存储此NSURLS或NSURLS集合的正确方法是什么?
答案 0 :(得分:10)
您无法直接在NSURL
中存储NSUserDefaults
,仅NSData
,NSString
,NSNumber
,NSDate
,{{1 },或NSArray
;此外,任何NSDictionary
或NSArray
都只能包含这些类型的对象。您必须将NSURL转换为其中一种类型,最有可能的方法是使用absoluteString将它们转换为NSStrings。
答案 1 :(得分:0)
问题在于[mySingleton sharedMySingleton].sharedURLS
。 NSURls不能存储在NSUserDefaults中,至少在NSURL类中,因为它们不是属性列表对象(下面的说明)。我建议将URL转换为NSStrings,然后将它们放在NSUserDefaults中,如下所示:
NSString *urlString = [url absoluteString];
另一个用户遇到了类似的问题(NSUserDefaults won't save NSDictionary),其中问题是程序员放入NSDictionary的对象(在本例中为NSArray)不是属性列表对象。基本上,属性列表对象是NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary之类的东西,是保存到NSUserDefaults所需的格式。
答案 2 :(得分:0)
if you want save Object Like Array ,So you use Archived Class
NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS];
[[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:temp] forKey:@"URLs"];
you also need coder and decoder method for this.
This is Working Fine For Me.