2013-11-20 169 views
0

我在存储保存一些对象的NSMutableArray时遇到了问题。在这些对象内部还有一个NSMutableArray,它也包含一些对象。存储保存对象的NSMutableArray

例如:NSMutableArray的 “汽车” - > NSObject的 “保时捷” ---> NSMutableArray的 “零件” ---> NSObject的 “轮胎”

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

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

感谢

编辑

如果这是一个重复的,可有人告诉我该怎么办呢?因为我尝试了几乎所有在谷歌上找到的代码。没有代码工作。

+0

你试过了什么代码? –

+0

我试了这么多代码..与NSCoding代码和类似的东西。例如:[link](http://stackoverflow.com/questions/537044/storing-custom-objects-in-an-nsmutablearray-in-nsuserdefaults) –

回答

0

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

NSMutableArray *mutable = [arrayFromUserDefaults mutableCopy]; 

NSMutableArray *mutable = [NSMutableArray arrayWithArray:arrayFromUserDefaults]; 

然而,在层次结构像你描述它变得更加复杂。基本上你必须遍历整个层次结构并在必要时创建可变数组。

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

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

你可以看到这是多么荒谬......我认为这是非常繁琐和不必要的。相反,你应该转向某种对象图形,比如核心数据。

+0

它现在适用于我!使用此代码:[Here](http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults)我在我的代码中有一个愚蠢的错误。 –

+0

这与我的回答非常相似。您应该通过勾选复选标记来接受它。 – Mundi