напиши словарь, чтобы листать на iphone - PullRequest
1 голос
/ 28 сентября 2011

Я хочу добавить новый словарь в существующий файл plist, как я могу это сделать, я могу читать из файла, но при том же подходе запись не работает.Моя структура plist выглядит так:

Root         Array
  |__item0   Dictionary
  |__item1   Dictionary
  |__item2   Dictionary

Код записи в файл выглядит так:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *plistPath = [documentDirectory stringByAppendingPathComponent:@"list.plist"];

if (![fileManager fileExistsAtPath:plistPath]) {
    plistPath = [[NSBundle mainBundle] pathForResource:@"list" ofType:@"plist"];
}

NSMutableArray *dataRoot = [NSMutableArray arrayWithContentsOfFile:plistPath];

NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
[item setObject:@"value1" forKey:@"1"];
[item setObject:@"value2" forKey:@"2"];
[item setObject:@"value3" forKey:@"3"];
[dataRoot addObject:item];
[dataRoot writeToFile:plistPath atomically:YES];
[item release];

Может кто-нибудь помочь мне с этим, спасибо!

Я обновил свой код, но он все еще не работает ... И проблема в том, что файл list.plist не копируется в каталог ~ / Documents.

Ответы [ 4 ]

0 голосов
/ 28 сентября 2011

Вы пытаетесь написать основной пакет, которого нет на iOS. Пожалуйста, прочитайте Несколько важных каталогов приложений .

Но ваше кодирование сводится к следующему:

  1. Проверьте, нет ли plist в Application_Home / Documents /
  2. Скопированный исходный лист из основного комплекта является ответом на шаг 1: false .
  3. Открыть список в каталоге Документы
  4. Обновление NSMutableArray
  5. Записать в файл список
0 голосов
/ 28 сентября 2011

По умолчанию можно сохранять только типы примитивов.

Попробуйте эту ссылку.

http://deadpanic.com/howtosave

Он объясняет, как сохранить любой объект на диск с помощью NSCodingпротокол.

Если вы работаете только с примитивами, то я прошу прощения за трату вашего времени.Но это путь, который я выбрал, чтобы записать свои пользовательские материалы на диск.И я подумал, что это просто проблема с массивом.

Редактировать:

Я только что заметил ... Похоже, вы пытаетесь записать массив в Main Bundle.Эти файлы доступны только для чтения.

Вам необходимо сохранить копию файла в каталоге документов.

попробуйте это, чтобы найти каталог документов

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

// Change your plistPath to be this
plistPath = [documentsDirectory stringByAppendingPathComponent:@"list.plist"];
[dataRoot writeToFile:plistPath atomically:YES];

putВаш список в этой папке, и вы можете написать в него.

0 голосов
/ 28 сентября 2011

NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"list.plist"];


if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {


bingoArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath];

}

[bingoArray writeToFile:filePath atomically:YES];
0 голосов
/ 28 сентября 2011

Я думаю, что код не является неправильным.

Вы проверяли plistPath, dataRoot и item?

Они имеют правильное значение?

...