我环顾四周,看到了几篇有关对包含NSDictionaries的NSMutableArray进行排序的文章,但是还没有找到一些具体示例来说明如何实际制作由NSDictionaries组成的NSMutableArray。

我正在使用NSUserDefaults来跟踪几个不同项目的用户首选项。 NSMutableArray将用于跟踪所有项目,而NSDictionaries用于涉及每个项目的个人偏好。

我已经编写了这些方法来跟踪我的首选项类中的项目,但是我不太确定如何初始化NMutableArray以包含NSDictionaries。

-(NSMutableArray *)deviceListArray
{
    return [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"device_list_array"];
}

-(void) setDeviceListArray:(NSMutableArray *)deviceListArray
{
    [[NSUserDefaults standardUserDefaults] setObject:deviceListArray forKey:@"device_list_array"];
}

如果有人能指出正确的方向,我将不胜感激。非常感谢你!或者,如果某人有更好的策略来跟踪具有不同偏好的项目,那也将很棒!

谢谢!!

最佳答案

将的对象交给userDefaults后,它便拥有该对象-因此您无法更改其中的字典属性。

您可以做的是两遍复制,其中有一个带有可变字典的本地可变数组。您将创建一个具有相同大小的新可变数组,然后对于每个可变字典,调用[NSDictionary dictionaryWithDictionary:],然后将新的非可变字典添加到新数组中。

如果您将可变对象埋在词典中,那么您需要这样做。

综上所述,如果您有大量的东西,我怀疑您没有适当地考虑如何使用默认系统。我几乎总是只保存字符串,数字,颜色等。

编辑:代码

NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];

for(int i=0; i<10; ++i) {
  NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:10];
  // add stuff to the dictionary
  [array addObject:dict];
}

// later on want to change second dictionary:
NSMutableDictionary *dict = [array objectAtIndex:1];
// fool around with dict
// no need to re-save it in array, since its mutable

10-08 07:13