在默认情况下直接添加到数组

时间:2014-02-06 10:30:30

标签: ios objective-c uitableview defaults

可以打电话给它吗?

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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];