У меня есть приложение, в котором есть несколько ViewControllers
. У каждого ViewController
есть вопрос с 2-5 buttons
возможными ответами. Название кнопки сохраняется в NSMutableArray
с именем submission
. Пользователь может вернуться к предыдущим вопросам, изменить свой ответ, и NSMutableArray
будет соответствующим образом обновлен. Мне нужно сохранить этот массив в файл, чтобы новые результаты можно было сохранять в UITableView
каждый раз, когда заполняется анкета. Я исследовал, и похоже, что .plist - хороший вариант, так как все мои объекты в массиве NSStrings
.
Образец моего массива:
2013-12-17 14:06:34.210 Questionnaire[1724:70b] (
1234,
"Dec 17, 2013",
Yes,
Games,
"Not Applicable",
Yes
)
«1234» — это идентификатор пользователя, дата — это дата рождения, а остальные отправленные материалы — это ответы на каждый вопрос.
Мои 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
передается через каждый ViewController.
Мои вопросы: Какой метод сохранения в файл лучше всего подходит для моих нужд? (.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];