0

可以这样称呼吗?

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

我有一个UITableView我想直接从默认值加载的单元格,我还想修改这些默认值。我想知道上面的行是否真的有任何影响(当我NSLog默认的数组searchEngineOrder为空时,我想知道是否是因为上面的代码实际上并没有添加到默认值中。

4

2 回答 2

3

一般来说,那行代码会崩溃。用户默认返回不可变对象,因此调用addObject:将引发异常。

您也不应该依赖对返回的对象所做的更改被备份到数据存储中 - 这不是特定于用户的默认设置,它适用于任何未将其记录为受支持的 API。

您应该通过定义的修改和保存点将您的工作数据和存储数据之间的逻辑分开。确保您可变复制从用户默认值中提取的数据。您还应该使用registerDefaults:来设置初始值,这样您就不需要检查是否存在。

于 2014-02-06T10:34:14.150 回答
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];
于 2014-02-06T10:46:52.147 回答