将数组保存到NSUserDefaults

时间:2011-02-27 03:03:59

标签: iphone nsurl

如何将数组保存到NSUserDefaults?

我有以下代码尝试存储NSURL数组

NSArray *temp = [[NSArray alloc] initWithArray:[mySingleton sharedMySingleton].sharedURLS];
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
[defs setObject:temp forKey:@"URLs"];

但我收到警告

  

- [NSUserDefaults setObject:forKey:]:尝试插入非属性值

存储此NSURLS或NSURLS集合的正确方法是什么?

3 个答案:

答案 0 :(得分:10)

您无法直接在NSURL中存储NSUserDefaults,仅NSDataNSStringNSNumberNSDate,{{1 },或NSArray;此外,任何NSDictionaryNSArray都只能包含这些类型的对象。您必须将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.