Добавить новый вход в plist в папке с документами

После долгих поисков SO я смог придумать код для исправления предыдущих неудач. То, что я пытаюсь выполнить, - это принять пользовательский ввод из UITextField и добавить этот вход в мой TableView, который заполнен из plist. Корневое значение моего plist - это словарь, и я хотел бы сохранить его как таковой. Моя проблема в том, когда writeToFile, я полностью writeToFile существующие значения вместо вставки, добавления или добавления к существующим данным. Не кажется, что моя попытка объединить два словаря работает, поскольку только новое значение сохраняется в plist. Любое понимание того, где я ошибаюсь? Следующий код - это то, что у меня есть

//////////********** Add New Cell When OK is Chosen

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

 UITextField *newDevice = [alertView textFieldAtIndex:0];
 NSLog(@"newDevice - %@",newDevice.text);

 if (alertView.tag == 1 && buttonIndex == 1){

 NSMutableDictionary *input = [[NSMutableDictionary alloc]init];
[input setObject:[NSArray arrayWithObject:newDevice.text] forKey:@"Room"];


 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Test.plist"];
 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

 // Combine the two Dictionaries to create one
[dictionary addEntriesFromDictionary:input];

 // Write Combined Dictionary to plist
[dictionary writeToFile:path atomically:YES];

 // Add Newly Created text to Table because reload table doesn't do it
[myTableData addObject:newDevice.text];

 // Reload Table Data even though it seems useless 
[myTable reloadData];


 }

}
1 ответ

Думаю, вы переписали ценности ключевой Room.

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Test.plist"];
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

// Get exist input from plist
NSMutableArray *inputFromPlist = dictionary[@"Room"];
// add new object to input
[inputFromPlist addObject:newDevice.text];
// set Room with modified object
[dictionary setObject:inputFromPlist forKey:@"Room"];
// Write Combined Dictionary to plist
[dictionary writeToFile:path atomically:YES];
// do something after saving plist ...

licensed under cc by-sa 3.0 with attribution.