Я создаю надстройку для своего приложения, где пользователь может искать элемент в списке, который предварительно заполнен данными из файла .plist.Это NSDictionary.Если искомый пользователь не существует, пользователь может нажать кнопку «+» и добавить его, чтобы он был там в следующий раз.
Сначала я подумал, что это будет так же просто, как использовать NSUserDefaults., но возникает несколько проблем.
Чтобы включить список, я должен поместить его в пакет, но если он есть, я не могу добавить в него новые пары ключ / значение.Это я могу сделать только с файлами, расположенными в папке «Документы».
Так что я предполагаю, что мне нужно связать plist, а затем при первом запуске переместить его в папку с документами и получить к нему доступ.
Это открывает проблему, когда мне нужно обновить приложение, я думаю, оно перезапишет значения, введенные пользователем.
Существует ли безопасный, понятный и правильный способ достижения функциональности, которую яопишите?
Спасибо за предоставленную помощь:)
Редактировать: **** фактический подход, какпредложено TheSquad и TomH *****
+ (NSMutableDictionary*) genericProducts {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"GenericProducts.plist"];
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *bundlePlistPath = [bundlePath stringByAppendingPathComponent:@"GenericProducts.plist"];
if([fileManager fileExistsAtPath:documentPlistPath]){
NSMutableDictionary *documentDict = [NSMutableDictionary dictionaryWithContentsOfFile:documentPlistPath];
return documentDict;
} else {
NSError *error;
BOOL success = [fileManager copyItemAtPath:bundlePlistPath toPath:documentPlistPath error:&error];
if (success) {
NSMutableDictionary *newlySavedDict = [NSMutableDictionary dictionaryWithContentsOfFile:documentPlistPath];
return newlySavedDict;
}
return nil;
}
}
И для добавления нового продуктак списку:
+ (void) addItemToGenericProducts:(NSString*) newProduct {
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"GenericProducts.plist"];
NSMutableDictionary *documentDict = [NSMutableDictionary dictionaryWithContentsOfFile:documentPlistPath];
[documentDict setObject:newProduct forKey:[MD5Checksum cheksum:newProduct]];
[documentDict writeToFile:documentPlistPath atomically:YES];
}