objective-c - 在可变数组中添加或替换的对象是否会自动持久化?

标签 objective-c ios

我正在构建一个非常简单的应用程序来存储姓名、年龄等人的数据。我让用户可以选择更改数据,例如某人的生日。我想不出存储数据的最佳方式。

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

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

最佳答案

你有一些误解。

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

如果你想保存一个数组,你有很多选择。

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

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

但是,如果您的数组包含我上面列出的类型以外的任何对象,那么这些方法(NSUserDefaults 或 writeToFile:atomically)都不会起作用。

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

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

关于objective-c - 在可变数组中添加或替换的对象是否会自动持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465688/

相关文章:

objective-c - 使用-presentModalViewController :animated: with UITabBarController NOT animated

ios - 当应用程序从后台带到前台时如何制作 UIAlertView

iphone - 将 int 保存到内部存储器 xcode iphone dev

iphone - 如何在 Objective C 中从 NSString 中拆分换行符

ios - Flutter iOS 应用程序在启动时显示白屏并在该屏幕上挂断

iPhone - 从纬度和经度获取城市名称

objective-c - FSEvents-检测文件夹上的事件类型

ios - 检测 UICollectionView 的上拉或拖动

ios - 有没有办法在 Info.plist 文件的其他地方引用 CFBundleIdentifier ?

ios - 谷歌地图 SDK - 路径不准确