У меня есть приложение, которое содержит несколько ViewControllers
. У каждого ViewController
есть вопрос с 2-5 buttons
в качестве возможных ответов. Название кнопки сохраняется на NSMutableArray
под названием submission
. Пользователь может вернуться к предыдущим вопросам, изменить их ответ, и соответственно обновится 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» является идентификатором пользователя, дата является дата рождения и другие материалы являются ответы на каждый вопрос.
Моего 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];
Чтобы все было просто, вы можете начать с сохранения до 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