将NSMutableArray的内容保存到文件

时间:2013-12-17 14:31:15

标签: ios objective-c memory-management nsmutablearray plist

我的应用有几个ViewControllers。每个ViewController都有一个问题,可能会有2-5 buttons个答案。按钮的标题将保存到名为NSMutableArray的{​​{1}}。用户可以返回先前的问题,更改他们的答案,submission将相应更新。我需要将此数组保存到文件中,以便每次完成调查问卷时都可以将新结果保存到NSMutableArray。我已经研究过,听起来像.plist是一个不错的选择,因为我在阵列中的所有对象都是UITableView

我的数组样本:

NSStrings

“1234”是用户ID,日期是出生日期,其他提交是每个问题的答案。

我的ViewControllers看起来像这样:

2013-12-17 14:06:34.210 Questionnaire[1724:70b] (
    1234,
    "Dec 17, 2013",
    Yes,
    Games,
    "Not Applicable",
    Yes
)

MainViewController InfoViewController <-- Array allocated + initialised, inserting ID and DoB Q1ViewController <-- question .. Q4ViewController <--question ENDViewController <-- offers user options for Home or Results ResultsViewController <-- UITableView ordered by User ID SavedResultsViewController <-- UITableView showing complete submission 通过每个ViewController传递。

我的问题:保存到文件的哪种方法最适合我的需求? (.plist,filetype等)。在Excel上查看结果会很好(但不是必需的)。保存应该在哪里?我想在最后一个对象插入Q4 NSMutableArray的数组时,所以当弹出ViewController时它会被保存到文件中,这是合乎逻辑的吗?我是否需要创建新的ENDViewController文件来存储数据?我已经看到了一些教程解释这个,在一个单独的Objective-C文件中声明每个对象,虽然我不确定是否需要这个,因为我的对象已经存储在数组中。

你可能已经猜到我对Objective-C和iOS编程很新,所以非常感谢所提供的任何帮助。我不确定如何描述我的问题,如果问题仍然不清楚,请道歉。

编辑:自从创建这篇文章以来,我已经学习了更多关于Objective-C的知识,并决定将我的数据保存到.csv文件中。此文件仅用于发送电子邮件,它不会显示在NSObject上(我目前正在实施UITableView)。这个解决方案可能在将来帮助某人,所以这就是:

Core Data

2 个答案:

答案 0 :(得分:1)

您可以将数组保存为JSON文件。这将允许您在文本编辑器中查看它,但不能在电子表格中查看它。以下代码将JSON写入文件:

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"yourdata.json"];
NSError *e = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:yourdata options:NSJSONWritingPrettyPrinted error:&e];

if (jsonData) {
    [jsonData writeToFile:url.path atomically:YES];
}

您还可以将数据保存为plist文件。以下内容将数据写入plist:

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"yourdata.plist"];
NSError *e = nil;
NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:yourdata format:NSPropertyListXMLFormat_v1_0 options:0 error:&e];

if (plistData) {
    [plistData writeToFile:url.path atomically:YES];
}

Plists可以二进制或XML格式保存,上面将其保存为XML格式,这意味着XML也可以通过文本编辑器读取。同样,这不会作为电子表格查看。如果要以CSV格式导出数据,则可能必须编写自己的代码才能输出。

答案 1 :(得分:0)

您可以使用标准NSCoding协议来保存数据,但在这种情况下,您无法在Excel中读取它。 或者您可以将其保存在xml中。 或者,您可以手动创建csv(逗号分隔值)文件并在任何位置打开它。 无论如何,实施取决于你:)