我的应用有几个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
答案 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(逗号分隔值)文件并在任何位置打开它。 无论如何,实施取决于你:)