如何坚持NSMutableArray

时间:2014-01-12 08:12:12

标签: ios iphone objective-c nsmutablearray persistent-storage

我是iOS Dev的新手。 我开始使用Apple dev website

上真正有用的教程

所以我按照说明制作了简单的待办事项列表应用程序。

该应用:这是一个简单的待办事项列表。它有一个带有单个文本字段的视图,它接受一个输入,然后将该输入附加到表列表视图。表列表视图是我的“待办事项列表”,它是从NSMutableArray生成的。

问题:每当我退出并重新启动应用程序时,我的列表都会消失。

问题:我需要一种方法来保存存储我的列表的NSMutableArray *ToDoList

那么可以坚持列表吗?或者我是否必须使用某种数据存储? 我在询问并阅读有关在'NSUserDefaults'中存储列表的内容之前做了一些研究 - 但问题是,NsUserDefaults只返回 im-mutable Object

结论:

  1. 我们可以坚持使用NsMutable List吗?如果是,如何?

  2. 是否需要使用NSUserDefaults?为什么呢?

  3. 如果(2)为是,那么如何使NsUserDefaults的返回不可变对象变为可变?

  4. 然而,我应该告诉你,iOS开发人员的唯一手牌来自教程。如果你把它分解成最简单的形式,我会很喜欢它。

    谢谢。

4 个答案:

答案 0 :(得分:3)

1)如果您只想保存NSMutableArray,则可以使用NSUserDefaults

2)如果您不想处理核心数据并设置正确的数据结构,那么这似乎是唯一的选择。

3)当您从NSMutableArray获得NSArray *array时,只需使用[array mutableCopy]

答案 1 :(得分:2)

你最好去CoreData。它真的很容易实现和很好用。

以下是best tutorial开始使用

以下是Core Data programming guide from apple

这是why you should go for Core-Data

尽管有其他所有意见,我建议你只使用核心数据。 XCode& amp;提供的可视化界面似乎太容易了。大量的发展支持。

我反对使用NSUserDefaults,因为待办事项列表应该在您的应用中扩展,&您可能希望对这些对象执行多个操作。每次从userDefaults获取数据对我来说都不是好方法。

为什么要使用NSUserDefaults:

NSUserDefaults类提供了一个用于与默认系统交互的编程接口。默认系统允许应用程序自定义其行为以匹配用户的首选项。例如,您可以允许用户确定应用程序显示的度量单位或自动保存文档的频率。应用程序通过将值分配给用户默认数据库中的一组参数来记录此类首选项。这些参数被称为默认值,因为它们通常用于确定启动时应用程序的默认状态或默认情况下的行为方式。

这是Class Reference

答案 2 :(得分:1)

简短的回答是使用NSArray的writeToURL:atomically:和arrayWithContentsOfURL:方法将数组写入磁盘上的文件并从磁盘上读取数组。更长的答案可以证明可能的位置......现在我将跳到答案:“到'〜/ 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

答案 3 :(得分:0)

您最好使用Core Data或其他一些持久性方式,例如FMDB。使用NSUserDefaults是可以的,但NSUserDefaults的效果确实不佳。您可以使用NSUserDefaults进行演示,但对于最终应用,强烈建议使用更好的方法。