2014-02-06 30 views
0

可以調用它嗎?默認情況下直接添加到陣列

[[[NSUserDefaults standardUserDefaults] objectForKey:@"searchEnginesOrder"] addObject:@"eBay"]; 

我有我想直接從默認加載,並且我也想修改這些默認值UITableView其細胞。我想知道是否上面的行實際上有任何影響(當我NSLog默認的陣列searchEngineOrder它是空的,我想知道是否因爲上述代碼實際上並沒有添加到默認值

+0

沒有。你從默認返回的任何對象都是不可變的。你可以做的是獲得一個可變的副本,追加並再次保存。 – Alladinian

回答

3

一般來說,代碼行會崩潰用戶默認返回不可變對象所以調用addObject:將會拋出異常

您也不應該依賴對數據存儲中返回對象的更改 - 這不是用戶默認特定的,它適用於任何不支持它的API。

你應該在你的工作數據和您存儲的數據進行定義的修改和保存點。確保你可變的複製你從用戶默認提取的數據。您還應該使用registerDefaults:來設置初始值,因此不需要檢查是否存在。

+0

它不會崩潰程序,但據我所見,沒有任何影響。另外,可以做下面的事情:'dict = [[[NSUserDefaults standardUserDefaults] objectForKey @「searchEnginesOrder」] mutableCopy]'?非常感謝。 – user3266395

+0

不會崩潰可能意味着您從未將值設置爲默認值。是的,你可以像這樣做可變的副本。 – Wain

+1

它不會崩潰,因爲在Objective C中,你可以發送任何消息給nil,它們什麼都不做,並返回0(零,NULL)。由於您沒有爲@「searchEnginesOrder」鍵存儲任何對象,因此您的代碼基本上是'[nil addObject:@「eBay」]''。 – Kreiri

0

NSUserDefaults返回不可變對象。您必須創建可變副本才能編輯值。

NSMutableDictionary *subSettings; 

subSettings = [[[NSUserDefaults standardUserDefaults] 
       objectForKey:YOUR_SUBMAP_KEY] mutableCopy]; 
[subSettings setObject:YOUR_NEW_VALUE forKey:YOUR_VALUE_KEY]; 

[[NSUserDefaults standardUserDefaults] 
    setObject:subSettings forKey:YOUR_SUBMAP_KEY]; 

[subSettings release];