2011-02-27 81 views
4

数组如何保存到NSUserDefaults?将数组保存到NSUserDefaults

我有以下代码试图存储NSURLs

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

的阵列,但我得到一个警告

- [NSUserDefaults的的setObject:forKey:]:尝试插入非财产值

什么是正确的方式来存储这个或NSURLS的集合?

回答

10

不能直接存储的NSURLNSUserDefaults,只有NSDataNSStringNSNumberNSDateNSArray,或者NSDictionary;此外,任何NSArrayNSDictionary可能只包含这些类型的对象。您必须将NSURL转换为这些类型之一,很可能通过使用absoluteString将它们转换为NSString。

+0

太好了,谢谢。因此,如果我存储NSString表示形式的列表,那么在读取字符串之后如何获取URL,以便我可以使用该URL访问资产。 – jarryd 2011-02-27 03:20:41

+1

'[NSURL URLWithString:string]' – Anomie 2011-02-27 03:23:21

+0

谢谢。是否有可能从一个url创建一个ALAsset?如果我这样做NSURL * url = [[NSURL alloc] initWithString:[urlStrings objectAtIndex:i]]; \t \t ALAsset * tAsset = [[ALAsset alloc] initWithContentsOfURL:url];由于无法识别的选择器发送到initWithContentsOfURL,我得到崩溃 – jarryd 2011-02-27 03:31:20

0

该问题与[mySingleton sharedMySingleton].sharedURLS有关。 NSURls不能存储在NSUserDefaults中,至少在NSURL类中,因为它们不是属性列表对象(下面的解释)。我建议转换网址NSString的,然后将它们放置在NSUserDefaults的,就像这样:

NSString *urlString = [url absoluteString];

有类似问题的用户不得不在这里(NSUserDefaults won't save NSDictionary),其中的问题是,对象程序员放到NSDictionary(在这种情况下,NSArray),不是属性列表对象。基本上,属性列表对象是像NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary,保存到NSUserDefaults所需的格式。

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.