为什么不使用NSArray 而不是使用NSDictionary 来保存您的数据,因为这将使您在需要时更容易获取数据并且更容易转换为JSON。
所以我会做类似的事情:
// Few constants for keys
NSString const *itemsListKey = @"FruitItems";
NSString const *applesKey = @"Apples";
NSString const *bananasKey = @"Bananas";
创建一个新字典并将其添加到我们的NSUserDefaults
NSMutableDictionary *items = [[NSMutableDictionary alloc] init];
[items setObject:5 forKey:applesKey];
[items setObject:2 forKey:bananasKey];
[[NSUserDefaults standardUserDefaults] setObject:items forKey:itemsListKey];
[[NSUserDefaults standardUserDefaults] synchronize];
在我们的NSUserDefaults中检索现有字典并修改当前字典
// The dictionary retrieved isn't mutable so we need to get a mutable copy of it.
NSMutableDictionary *itemsRetrieved = [[[NSUserDefaults standardDefaults] dictionaryForKey:itemsListKey] mutableCopy];
// Lets update our Apples value
[itemsRetrieved setObject:9 forKey:applesKey];
// Set the dictionary back into NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:items forKey:itemsListKey];
[[NSUserDefaults standardUserDefaults] synchronize];
您会注意到这两种不同的方法之间没有太大的区别,因此您可以将其集成到如下的一种方法中。
// Obviously this constant being the key to your dictionary
NSString const *itemsListKey = @"itemsList";
- (void)updateItemsForKey:(NSString *)key withValue:(NSInteger)value
{
NSMutableDictionary *items [[NSMutableDictionary alloc] init];
if ([[NSUserDefaults standardDefaults] dictionaryForKey:itemsListKey] != nil) {
// If the key already exist in NSUserDefaults reallocate it
// to the one that exists.
items = [[[NSUserDefaults standardDefaults] dictionaryForKey:itemsListKey] mutableCopy];
}
[itemsRetrieved setObject:value forKey:key];
// Assign the dictionary back into NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:items forKey:itemsListKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
编辑 - 根据他们希望订购的 cmets。
真的,我们不在乎NSDictionary 是否已排序。如果我们希望对象按排序顺序排列,我们可以在执行allKeys 调用时将字典的键排序为排序顺序。
NSArray *orderedKeys = [[items allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
上面的代码会给你一个按数字排序的数组,然后你循环遍历orderedKeys数组以按照你想要的顺序得到你想要的值:
for (NSString *key in orderedKeys) {
id objectFromDict = [items objectForKey:key];
// Do whatever you want with that object.
}