Сохранение большого количества словарей и массивов - PullRequest
2 голосов
/ 02 октября 2011

Моя игра поставляется с большим количеством файлов .plist, содержащих множество словарей, массивов и т. Д. Они касаются статистики, информации и т. Д. Каждого участника группы.

Синглтон отвечает за чтение всех этих файлов и предоставляетнеобходимые данные для запуска моей игры.

Игра во многих точках будет редактировать такие значения из синглтона, как уровень героя, статистика и т. д.

В конце концов, игрок будетдать возможность «сохранить» игру.Моя первоначальная идея заключалась в том, чтобы в основном сказать синглтону «перезаписать» файлы .plist в проекте новыми отредактированными данными (новые данные могут иметь изменения в записях статистики и т. Д. Или даже совершенно новые словари, представляющие новых членов партии и т. Д.)готово.

Но я не знаю, как это сделать, или даже если это возможно.

Я слышал о NSUserDefaults, но я не знаю, подходит ли он для того, что яЯ стремлюсь, учитывая, что количество словарей и массивов будет довольно большим, и что в будущем можно будет добавлять новые словари и массивы.Представьте себе, что в группе может быть столько участников, сколько вы пожелаете, например.

* Примечание: нет нескольких файлов / профилей сохранения.Когда вы нажимаете сохранить, он сохраняет, ничего не спрашивая.

1 Ответ

2 голосов
/ 02 октября 2011

NSUserDefaults не подходит для любого значительного объема данных. Просто запишите plist в каталог документов, укажите atomic:YES, чтобы убедиться, что весь файл записан.

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

Если ДА, массив (или словарь) записывается во вспомогательный файл, и тогда вспомогательный файл переименовывается в path. Если НЕТ, массив написано прямо в путь. Параметр YES гарантирует этот путь, если он существует вообще, не будет поврежден, даже если система выйдет из строя во время письма.

Этот метод существует для NSArray и NSDictionary,

Получить каталог документов:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
BOOL status = [NSDictionary writeToFile:filePath atomically:YES];

NSDictionary может иметь десять NSArray в зависимости от верхнего элемента списка.

Рассмотрите возможность использования CoreData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...