NSUserDefaults与SQLite3。 NSUSerDefaults不可变吗?

时间:2011-09-08 10:59:50

标签: iphone sqlite nsuserdefaults

请原谅,我知道这些问题的答案已经存在。但我想知道我的方法是否为我的实现选择NSUserDefaults是正确的。

我正在尝试在UITableView上显示一个“收藏列表”,我需要为每个列表保存大约5个对象。所以我想我的tableView dataSource在NSDictionary内会有NSArray

当我读到“从NSUserDefaults返回的值是不可变的”时,我对使用NSUserDefaults感到吃惊。有没有办法可以操纵存储的对象?例如,从NSUSerDefaults读取数组,然后在其上添加新对象并将其存储回来。

NSUserDefaults看起来很容易使用。

EDIT 我们可以在?

中插入可变对象吗?

2 个答案:

答案 0 :(得分:0)

如果它是Mutable / Immutable集群的一部分,如NSArray / NSMutableArray NSDictionary / NSImmutableDictionary等,您可以调用mutableCopy来获取对象的副本。

所以从字典中取出对象 - 在其上调用mutableCopy,你可以修改它并保存回来。

请记住,此方法的名称中有一个副本,因此您需要在完成后释放副本。

答案 1 :(得分:0)

您可以从NSUserDefaults中读取对象,如下所示:

//Read from NSUSerDefaults
NSMutableArray* favListArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"listArray"]];

//Add objects to array
[favListArray addObject:@"NewObject1"];
[favListArray addObject:@"NewObject2"];

//Overwrite the NSUSerDefaults valueForKey:@"listArray"
[[NSUserDefaults standardUserDefaults] setObject:favListArray forKey:@"listArray"];
[[NSUserDefaults standardUserDefaults] synchronize];