我在存储包含某些对象的NSMutableArray时遇到问题。在这些对象中还有一个NSMutableArray,它还包含一些对象。
例如:NSMutablearray“cars” - > NSObject“保时捷”---> NSMutableArray“Parts”---> NSObject“轮胎”
现在我想保存第一个阵列“汽车”,所以当我关闭应用程序并再次打开它时,阵列仍然存在。 我读了几个选项 - 例如NSUserDefaults。我试过了,但它不起作用。
有人可以帮助/教我如何存储这样的NSMutableArray吗?
由于
修改
如果这是重复的,有人可以告诉我该怎么做?因为我尝试了几乎所有在谷歌上找到的代码。没有代码可以使用。
答案 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。