我有一个应用程序有几个ViewControllers
。每个ViewController
都有一个问题2-5 buttons
作为可能的答案。一个按钮的标题被保存到名为submission
的NSMutableArray
。用户可以回到以前的问题,更改他们的答案,并且NSMutableArray
会相应地更新。我需要将此数组保存到文件中,以便每次完成问卷时可以将新结果保存到UITableView
中。我已经研究过,听起来像一个.plist是一个不错的选择,因为我的所有对象都在NSStrings
。将NSMutableArray的内容保存到文件
我的阵列的样品:
2013-12-17 14:06:34.210 Questionnaire[1724:70b] (
1234,
"Dec 17, 2013",
Yes,
Games,
"Not Applicable",
Yes
)
“1234”是用户ID,日期是出生日期,和其他提交是答案的每个问题。
我ViewControllers是这样的:
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
的NSMutableArray
获得通过每个视图控制器通过。
我的问题:什么方法保存到文件将最适合我的需求? (.plist,文件类型等)。在Excel上查看结果会很好(但不是必需的)。保存在哪里?我在考虑何时在Q4 ViewController
上将最后一个对象插入到阵列中,因此弹出ENDViewController
时它会保存到文件中,这是否合乎逻辑?我是否需要创建一个新的Objective-C
文件来存储数据?我已经看到了一些教程解释这个,声明每个对象在一个单独的NSObject
文件,虽然我不知道是否需要,因为我的对象已经存储在数组中。您可能已经猜到我对Objective-C和iOS编程颇为陌生,因此非常感谢所提供的任何帮助。我不知道如何描述我的问题,所以如果问题仍不清楚,请致歉。
编辑:自从创建这篇文章以来,我已经学习了一些关于Objective-C的知识,并决定将我的数据保存到.csv文件。此文件严格用于电子邮件的目的,它不显示在UITableView
(我目前正在实施Core Data
)。该解决方案可以帮助别人的未来,所以在这里它是:
// Set column titles for .csv
NSArray *columnTitleArray = @[@"User ID", @"DoB", @"Question 1", @"Question 2", @"Question 3", @"Question 4"];
NSString *columnTitle = [columnTitleArray componentsJoinedByString:@","];
NSString *columnTitleToWrite = [columnTitle stringByAppendingString:@"\n"];
// Separate submissions from array into cells
NSString *questionResults = [self.submission componentsJoinedByString:@","];
NSString *questionResultsToWrite = [questionResults stringByAppendingString:@"\n"];
// Find documents directory
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// Set file name and type
NSString *survey = [docPath stringByAppendingPathComponent:@"result.csv"];
// Create new file if none exists
if (![[NSFileManager defaultManager] fileExistsAtPath:survey]){
[[NSFileManager defaultManager] createFileAtPath:survey contents:nil attributes:nil];
// Set column titles for new file
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:survey];
[fileHandle writeData:[columnTitleToWrite dataUsingEncoding:NSUTF8StringEncoding]];
}
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:survey];
[fileHandle seekToEndOfFile];
[fileHandle writeData:[questionResultsToWrite dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandle closeFile];
为了简单起见,您可以开始储存为plist。为此,查看[本指南](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html)。 – Jeremy
我试图用Apple文档学习它,但我始终觉得它是以一种方式写的,假设读者是Objective-C中的优秀程序员。我一直在努力研究更多初学者友好的教程,你认为我可以在我的代码中实现这个吗? - https://gist.github.com/hollance/6328192 – rosshump