【问题标题】:Store NSMutableArray which holds Objects [duplicate]存储保存对象的 NSMutableArray [重复]
【发布时间】:2013-12-05 02:04:33
【问题描述】:

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

例如:NSMutablearray "cars" --> NSObject "Porsche" ---> NSMutableArray "Parts" ---> NSObject "Tires"

现在我想保存第一个数组“汽车”,所以当我关闭应用程序并再次打开它时,数组仍然存在。 我阅读了一些选项——例如 NSUserDefaults。我试过了,还是不行。

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

谢谢

编辑

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

【问题讨论】:

  • 你试过什么代码?
  • 我尝试了很多代码.. 带有 NSCoding 的代码之类的东西。例如:link

标签: ios objective-c nsmutablearray


【解决方案1】:

如果您将数组存储在 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。

【讨论】:

  • 现在对我有用!!使用此代码:Here 我的代码中有一个愚蠢的错误。
  • 这与我的回答非常相似。您应该通过勾选复选标记来接受它。
猜你喜欢
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多