如何坚持NSMutableArray
我是iOS Dev的新手。 我开始在Apple dev网站上提供非常有用的教程
所以我按照说明制作了简单的待办事项列表应用程序。
应用程序:这是一个简单的待办事项列表。 它有一个带有单个文本字段的视图,它接受一个输入,然后将该输入附加到表列表视图。 表列表视图是我的“待办事项列表”,它是从NSMutableArray生成的。
问题:每当我退出并重新启动应用程序时,我的列表就会消失。
问题:我需要一种方法来保存存储我的列表的NSMutableArray *ToDoList
。
那么有可能坚持清单吗? 或者我是否必须使用某种数据存储? 我在询问和阅读有关在’NSUserDefaults’中存储列表的内容之前做了一些研究 – 但问题是,NsUserDefaults只返回一个im-mutable对象
结论:
-
我们可以坚持使用NsMutable List吗? 如果有,怎么样?
-
是否需要使用NSUserDefaults? 为什么?
-
如果(2)是,那么我如何使NsUserDefaults的返回不可变对象可变?
我再次告诉你,iOS开发的唯一手牌来自教程。 如果你把它分解成最简单的forms,我会喜欢它。
谢谢。
1)如果您只想保存NSMutableArray
,那么是的,您可以使用NSUserDefaults
。
2)如果您不想处理核心数据并设置适当的数据结构,那么这似乎是唯一的选择。
3)当您从NSArray *array
获得NSMutableArray
,只需使用[array mutableCopy]
。
你最好去CoreData。 它非常容易实现和使用。
这是最好的入门教程
这是来自apple的核心数据编程指南
这就是你应该选择核心数据的原因
尽管有其他所有意见,我建议你只使用核心数据。 使用XCode提供的可视化界面和大量的开发支持似乎太容易了。
我反对使用NSUserDefaults,因为待办事项列表应该在您的应用程序中扩展,并且您可能希望对这些对象执行多个操作。 每次从userDefaults获取数据对我来说都不是好方法。
为什么使用NSUserDefaults:
NSUserDefaults类提供了一个用于与默认系统交互的编程接口。 默认系统允许应用程序自定义其行为以匹配用户的首选项。 例如,您可以允许用户确定应用程序显示的度量单位或自动保存文档的频率。 应用程序通过将值分配给用户默认数据库中的一组参数来记录此类首选项。 这些参数称为默认值,因为它们通常用于确定应用程序在启动时的默认状态或默认情况下的行为方式。
这是Class Reference
简短的回答是使用NSArray的writeToURL:atomically:和arrayWithContentsOfURL:方法将数组写入磁盘上的文件并从磁盘上读取数组。 更长的答案可以certificate这可能是合理的……现在我将跳到答案:“到’〜/ Library / Application Support /’文件夹中的(在你的应用程序中是独一无二的)文件夹中的文件。(注意:我我是OSX程序员…… iOS应用程序可能有更好的地方…… ;-)这里是代码:
NSArray * array; // <<== this is your array (I assume you've created it somewhere…) // get the document directory URL NSURL *documentsDirectoryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentsDirectory inDomains:NSUserDomainMask] firstObject]; // append our file name NSURL *url = [documentDirectoryURL URLByAppendingPathComponent:@"ToDo.data" isDirectory:NO]; #if WRITING_ARRAY // write our array to the file if (![array writeToURL:url atomically:YES]) { NSLog(@"Failed to writeToURL:'%@'", url); } #else // READING_ARRAY // read (mutable) array from file array = [[NSArray arrayWithContentsOfURL:url] mutableCopy]; #endif
您最好使用Core Data
或其他一些像FMDB
这样的持久化方式。 使用NSUserDefaults
是可以的,但NSUserDefaults
性能确实很差。 您可以使用NSUserDefaults
进行演示,但对于最终应用程序,强烈建议使用更好的方法。