Какие есть варианты сохранения данных в iOS?

Я хотел бы сериализовать кучу данных и сохранить их в файл, затем иметь возможность загрузить их (естественно) и воспроизвести с помощью функции, которую я написал. (Извините, если у меня нет терминологии, я новичок в этом деле.) Как лучше всего это сделать с iOS? Из просмотра документации здесь:

Руководство по стандартным приложениям

Я понял, что должен использовать NSSearchPathForDirectoriesInDomains для нахождения подходящего корневого каталога хранения (Documents?), А затем использовать NSData для хранения этих буферов данных, которые я создаю, и записывать их в файл. Я в этом разбираюсь или я ошибся? Любой другой мудрый совет?

3 ответа

Вы можете использовать plist.
Это очень легко сохранить список строк или других данных без использования основных данных.
Смотрите список свойств Руководство по программированию

Например, этот код сохранит объект (rootObj), который может быть массивом или словарем:

NSString *error;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj
                                                               format:NSPropertyListXMLFormat_v1_0
                                                     errorDescription:&error];
if(plistData) {
  [plistData writeToFile:plistPath atomically:YES];
}
else {
  NSLog(@"Error : %@",error);
  [error release];
}

Существует некоторое ограничение на поддерживаемый класс (см. Руководство)

Это зависит от данных, которые вы пишете. Если вы в основном хотите сериализовать объекты, см. Протокол NSCoding. Если у вас есть простая структура данных, которая не является классом, вы можете сохранить ее в NSDictionary и сохранить его в список. И если у вас большой кусок данных (например, тысячи поплавков или что-то в этом роде), вы можете сохранить их, используя NSData как вы уже намекали. В любом случае обязательно прочитайте Руководство по программированию архивов и сериализаций, чтобы не изобретать велосипед.

Да, довольно правильное направление. Вам нужно реализовать что-то, что называется протоколом NSCoding для вашего объекта, чтобы иметь возможность архивировать и разархивировать его в NSData. Смотрите пример: сохранение файлов на iOS с помощью NSFileManager

Другие вопросы по тегам