objective-c - 创建一个包含多个 NSMutableDictionary 对象的 NSMutableArray

标签 objective-c ios nsmutablearray nsdictionary nsuserdefaults

我环顾四周,看到了几篇关于对包含 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

关于objective-c - 创建一个包含多个 NSMutableDictionary 对象的 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731190/

相关文章:

ios - iOS Swift 读取 Json 失败

cocoa-touch - 如何制作可扩展的表格 View 单元格?

ios - 是否可以将 NSMutableArray 或 NSDictionary 数据保存为 iOS 中的文件?

ios - NSMutableArray 索引变得非常高并且 removeObjectAtIndex 超出范围

swift - 无法将类型 'NSMutableArray' 的值转换为预期的参数类型 '[SKAction]'

ios - iOS 8-滚动不起作用

objective-c - 向类中添加类别会影响性能吗

ios - Spritekit - 如何在特定场景中隐藏 iAd 横幅?

ios - 在 AVAudioEngine 中从网络流式传输数据,这可能吗?

ios - 在 Objective-C 中使用两个参数调用 void 函数