Самый простой способ чтения и записи списков свойств - это использовать классы NSArray или NSDictionary. Ваш скриншот выглядит как массив на верхнем уровне, поэтому я буду использовать это предположение для моих примеров.
Сначала вам понадобятся пути к файлу пользователя и исходному файлу.
NSString *pathToUserFile; // Get a path to the file in the documents directory
NSString *pathToDefaultFile; // Get a path to the original file in the application bundle
Затем вы пытаетесь загрузить
NSMutableArray *userData;
NSArray *temporary = [NSArray arrayWithContentsOfFile:pathToUserFile];
if(!temporary) temporary = [NSArray arrayWithContentsOfFile:pathToDefaultFile];
Так как кажется, что вы используете многоуровневые контейнеры, я предполагаю, что вам понадобятся самые внутренние массивы и словари для изменчивости. Обычная инициализация NSMutableArray не сделает этого, поэтому вам нужно использовать CFPropertyListCreateDeepCopy
с параметрами, установленными для изменяемых контейнеров.
userData = (NSMutableArray *)CFPropertyListCreateDeepCopy(NULL,(CFArrayRef)temporary,kCFPropertyListMutableContainers);
Теперь у вас есть изменяемый объект, представляющий ваши данные. Вы можете добавлять объекты или изменять существующие объекты так же, как вы обрабатываете любой массив, но вы можете добавлять только строки, числа, объекты данных, словари, массивы и даты, поскольку это единственные типы, допустимые в списках свойств.
[userData addObject:newDataObject];
Наконец, вы записываете данные в файл в каталоге документов. Метод writeToFile:atomically:
попытается выписать список свойств и вернет YES в случае успеха. Он потерпит неудачу и вернет NO, если файл не может быть записан, или если содержимое не является всеми допустимыми объектами списка свойств.
if(![userData writeToFile:pathToUserFile atomically:YES]) {
NSLog(@"Error writing to file");
}