Добавление нового словаря в мой файл plist - PullRequest
4 голосов
/ 01 декабря 2010

Root ---- Array
Item 0- Dictionary
fullName ---- String
address ---- String
Item 1 ---- Dictionary
fullName -- String
address ---- String

У меня есть список, который выглядит примерно так.В представлении у меня есть кнопка, при нажатии которой я хотел бы добавить новый «элемент 2», или 3, 4 или 5 и т. Д. Я просто хочу добавить еще несколько имен и адресов.

Сегодня я потратил 3 часа на поиски идеального примера, но потерпел неудачу.Образцы списков свойств Apple были слишком глубокими.Я видел код, который, вероятно, приблизится.

Большое спасибо

NSMutableDictionary *nameDictionary = [NSMutableDictionary dictionary]; [nameDictionary setValue:@"John Doe" forKey:@"fullName"]; [nameDictionary setValue:@"555 W 1st St" forKey:@"address"];</p> <pre><code>NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:[self dataFilePath]]; [plist addObject:nameDictionary]; [plist writeToFile:[self dataFilePath] atomically:YES];

- (NSString *)dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"children.plist"]; return path; }

1 Ответ

8 голосов
/ 01 декабря 2010

Предполагая, что список сохранен на диске в виде файла, вы можете открыть его и загрузить новое содержимое, вызвав метод arrayWithContentsOfFile.

// Create the new dictionary that will be inserted into the plist.
NSMutableDictionary *nameDictionary = [NSMutableDictionary dictionary];
[nameDictionary setValue:@"John Doe" forKey:@"fullName"];
[nameDictionary setValue:@"555 W 1st St" forKey:@"address"];

// Open the plist from the filesystem.
NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:@"/path/to/file.plist"];
if (plist == nil) plist = [NSMutableArray array];
[plist addObject:nameDictionary];
[plist writeToFile:@"/path/to/file.plist" atomically:YES];

-(void)addObject:(id)object всегда вставляется в концемассив.Если вам нужно вставить по определенному индексу, используйте метод -(void)insertObject:(id)object atIndex:(NSUInteger)index.

[plist insertObject:nameDictionary atIndex:2];
...