Я пытался написать простую программу списка покупок, но когда я пытаюсь записать измененные значения обратно в файл plist, я получаю только те исходные значения, которые были в файле для начала.
Мой исходный файл plist представляет собой один большой массив (dataArray) словарей, содержащий только два поля в каждом словаре, один bool и одну строку, когда вы выбираете элемент в табличном представлении, значение bool изменяется для отдельного элемента, и когда я вывожу В консоли dataArray я вижу, что значение было изменено, моя единственная проблема в том, что когда я пытаюсь записать dataArray в файл, я получаю файл в каталоге документов, но все значения bool по-прежнему отключены.
- (void)viewDidLoad {
//load from plist file
NSString *path = [[NSBundle mainBundle] pathForResource:@"OriginalChecklist" ofType:@"plist"];
self.dataArray = [NSMutableArray arrayWithContentsOfFile:path];
[super viewDidLoad];
}
- (void)viewWillDisappear:(BOOL)animated
{
NSString *documentsDirectory = [@"~/Documents/" stringByExpandingTildeInPath];
NSString *savePath = [documentsDirectory stringByAppendingPathComponent:@"Checklist.plist"];
[dataArray writeToFile:savePath atomically:YES];
NSLog(@"location information %@", savePath);
NSLog(@"dataAray contents %@=", dataArray);
}
И, как я уже сказал, выводя результат dataArray на консоль, я получаю следующие результаты из проверенных элементов.
cell = <UITableViewCell: 0x3b143d0; frame = (0 0; 320 44); text = 'Water Bottle'; autoresize = W; layer = <CALayer: 0x3b14650>>;
checked = 1;
text = "Water Bottle";
cell = <UITableViewCell: 0x3b20560; frame = (0 88; 320 44); text = 'GPS'; autoresize = W; layer = <CALayer: 0x3b20610>>;
checked = 1;
text = GPS;
Если кто-нибудь знает, как сохранить измененные результаты в файл plist, я был бы очень признателен за небольшую помощь.
Спасибо
Бред
У меня все еще есть небольшие проблемы с тем, что мое приложение может создать список и загрузить информацию из этого списка в раздел ViewDidLoad. Код, который я сейчас использую для проверки исходного файла, и если его нет, создайте его следующим образом
(void) viewDidLoad {
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"CustomChecklist.plist"];
success = [fileManager fileExistsAtPath:filePath];
NSLog(@"STATUS OF SUCCESS %@",success);
if (!success) {
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingFormat:@"OriginalChecklist.plist"];
success = [fileManager copyItemAtPath:path toPath:filePath];
self.dataArray = [NSMutableArray arrayWithContentsOfFile:filePath];
NSLog(@"IF STATEMENT CREATING THE FILE");
}else {
self.dataArray = [NSMutableArray arrayWithContentsOfFile:filePath];
NSLog(@"IF STATEMENT READING THE FILE");
}
NSLog(@"location information %@", filePath);
[super viewDidLoad];
}
Когда я создаю это приложение, оно собирается и работает нормально, но я получаю пару предупреждений
NSFileManager может не отвечать на -copyItemAtPath: toPath
После этого вывод на консоль выглядит так, как будто он даже не проверил файл или не создал файл для чтения.
2010-07-06 16: 22: 42.803 CampingChecklist [400: 207] СОСТОЯНИЕ УСПЕХА (пусто)
2010-07-06 16: 22: 42.805 CampingChecklist [400: 207] ЕСЛИ ЗАЯВЛЕНИЕ ЧИТАЕТ ФАЙЛ
2010-07-06 16: 22: 42.814 CampingChecklist [400: 207] информация о местоположении / Пользователи / Брэд / Библиотека / Поддержка приложений / iPhone Simulator / 3.1.3 / Приложения / E7074D5A-3E7A-4D2E-9F92-82B1A04873F8 / Documents / CustomChecklist .plist
И, очевидно, поскольку в файле ничего нет, когда он пытается сэкономить при выходе из приложения, он не создает никакого файла по указанному пути.
Если кто-нибудь сможет пролить свет на эту проблему, я был бы очень признателен.
Спасибо
Брэд