добавить словарь в plist - PullRequest
       10

добавить словарь в plist

0 голосов
/ 19 января 2011

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

мой код до сих пор:

NSString *plistPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"liste.plist"];

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
                                  [selectedEntry valueForKey:NAME], @"Name",
                                  [selectedEntry valueForKey:add], @"Add"
                                  , nil];

[tempArray writeToFile:plistPath atomically:YES];

Я нашел способ решить проблему.Я инициализирую массив в viewDidLoad и заполнил его списком, и теперь он работает ....

self.tempArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

и изменил

[dictionary writeToFile:plistPath atomically:YES];

на

[tempArray writeToFile:plistPath atomically:YES];

Ответы [ 3 ]

0 голосов
/ 19 января 2011

Вот что я использую:

NSFileManager *manager = [NSFileManager defaultManager];
NSMutableDictionary *dict;  
dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
        VALUE1, KEY1,
        VALUE2, KEY2,
        VALUE3, KEY3,
        VALUE4, KEY4,
        nil ];
NSString *err = nil;
NSData *plist;
plist = [NSPropertyListSerialization dataFromPropertyList:dict format:NSPropertyListBinaryFormat_v1_0 errorDescription:&err];

if([manager fileExistsAtPath:@"YourPlist.plist"] == NO){
    [manager createFileAtPath:[NSString stringWithFormat:@"YourPlist.plist"] contents:plist attributes:nil];
}
[manager release];
0 голосов
/ 21 января 2011

Если какой-либо объект из selectedEntry не является NSString, NSNumber, NSArray, NSDictionary и т. Д., Тогда запись не будет выполнена успешно:

Из справочного документа NSDictionary:

ThisМетод рекурсивно проверяет, что все содержащиеся в нем объекты являются объектами списка свойств (экземпляры NSData, NSDate, NSNumber, NSString, NSArray или NSDictionary) перед записью файла, и возвращает NO, если все объекты не являются объектами списка свойств, посколькуфайл не будет действительным списком свойств.

0 голосов
/ 19 января 2011

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

Когда вам нужно добавить материал, вы просто читаете изменяемый массив из списка, добавляете его и сохраняете.Насколько я помню, методы очень похожи между массивами и словарями при чтении / записи списков.

...