2011-02-27 118 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.