存储包含对象的NSMutableArray

时间:2013-11-20 20:54:21

标签: ios objective-c nsmutablearray

我在存储包含某些对象的NSMutableArray时遇到问题。在这些对象中还有一个NSMutableArray,它还包含一些对象。

例如:NSMutablearray“cars” - > NSObject“保时捷”---> NSMutableArray“Parts”---> NSObject“轮胎”

现在我想保存第一个阵列“汽车”,所以当我关闭应用程序并再次打开它时,阵列仍然存在。 我读了几个选项 - 例如NSUserDefaults。我试过了,但它不起作用。

有人可以帮助/教我如何存储这样的NSMutableArray吗?

由于

修改

如果这是重复的,有人可以告诉我该怎么做?因为我尝试了几乎所有在谷歌上找到的代码。没有代码可以使用。

1 个答案:

答案 0 :(得分:0)

如果将数组存储在plist中或NSUserDefaults中,则它总是不可变的。阅读之后你必须让它变得可变。使用简单的数组,这是微不足道的。

NSMutableArray *mutable = [arrayFromUserDefaults mutableCopy];

NSMutableArray *mutable = [NSMutableArray arrayWithArray:arrayFromUserDefaults];

但是,在您描述的层次结构中,它变得更加复杂。基本上,您必须遍历整个层次结构并在必要时创建可变数组。

请注意,plist和用户默认值都不能存储您的NSObject。您必须将其转换为NSDictionary,使用“name”和“parts”等键来保存名称字符串或部件数组。

NSMutableArray *mutable = [NSMutableArray array];
for (NSDictionary *car in arrayFromUserDefaults]) {
    NSArray *immutableParts = car[@"parts]; 
    NSMutableArray *parts = [immutableParts mutableCopy];
    [mutable addObject:@{"name":car[@"name"], @"parts":parts}];
}

你可以看到这有多荒谬......我认为这既麻烦又不必要。相反,您应该转移到某种对象图,例如Core Data。