是否在可变数组中添加或替换对象会自动保留?

时间:2012-05-05 20:25:21

标签: objective-c ios

我正在构建一个非常简单的应用程序来存储名称,年龄等人的数据。我给用户提供了更改数据的选项,例如当一个人有生日时。我无法找出存储数据的最佳方法。

我已经搜索了很长时间,我找不到我想要的简单答案。如果我更改可变数组中的数据,那么数据是否会永久更改?我的意思是会覆盖现有代码并更改数据,以便在应用程序关闭并重新加载时它仍然存在?

到目前为止,我无法做到这一点。我有MySql和Sql服务器的经验,所以如果可能的话,我倾向于去那个方向,但如果可能的话,我真的想使用一个可变数组或可变字典。这可能是一个基本问题,但我无法在任何地方找到答案。

5 个答案:

答案 0 :(得分:1)

看看核心数据。这是在iOS上管理此类数据存储要求的最简单方法。

看看我的书,它得到了很好的评价,非常适合你想要做的事情:http://www.amazon.com/Pro-Core-Data-iOS-Professionals/dp/1430233559

如果您想要一种简单的入门方式,那么也有大量的在线教程。例如Ray已经写了一些好东西:

http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started

答案 1 :(得分:1)

你有一些误解。

您创建的对象位于内存中。他们没有永久性的东西。您必须以某种方式保存它们,否则当您退出应用程序并返回时它们就会消失。

如果要保存数组,可以使用多种选项。

如果数组只包含NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary类型的对象,则可以使用系统类NSUserDefaults保存数组。

NSArray还有一个方法writeToFile:atomically:将数据数组保存到文件中。

如果您的数组包含除上面列出的类型之外的任何对象,则这些方法(NSUserDefaults或writeToFile:atomically)都不起作用。

另一种选择是使用NSKeyedArchiver将数组的内容转换为数据,然后将该数据写入文件。为了使该方法起作用,数组中的每个对象以及这些对象中的所有对象都需要支持NSCoding协议。

正如其他人所指出的那样,您也可以使用Core Data或mySQL来保存数据,但这对于保存数组来说似乎有点过分了。

答案 2 :(得分:0)

可变表示您可以随时更改数据,所以不,它不是永久性的。

答案 3 :(得分:0)

是的,根据您的要求,它将是永久性的。虽然因为数组是可变的,但这意味着你可以随时更改数据,初始数据将被这些新数据覆盖。

修改:不,关闭应用后信息不会保留。您需要以编程方式保存它。我会使用Core Data

答案 4 :(得分:0)

CoreData是数据通常在Cocoa和Cocoa-Touch中持久化的方式。它还为您提供了一些很好的额外功能,如撤消支持。但它有一个学习曲线。

如果您正在做的事情非常简单,请查看NSUserDefaults。如果您需要更多的灵活性,可以始终使用NSArray的{​​{1}}和-writeToFile:atomically:(这些方法的版本也会使用网址而不是文件路径。)

任何比这更复杂的事情,并且学习CoreData可能是值得的。