Итак, у меня есть приложение Master-Detail, которое имеет табличное представление с контроллером навигации, подробным представлением и модальным видом. Навигационное представление отображает названия напитков, подробный вид показывает выбранные данные о напитках, а модальный вид позволяет мне создать новый напиток или отредактировать существующий. Все заполнено из plist, который я уже переместил в каталог документов, и все читается от него просто отлично. Я знаю, что это работает, потому что я проверил с пустым plist, чтобы увидеть, изменились ли мои взгляды на пустой, и они успешно выполняются. Все мои взгляды работают отлично. Я могу добавлять и удалять напитки, а также обновлять таблицы с новым или удаленным или измененным напитком. Однако он не пишет файл plist успешно (я обновляю свой plist из массива с именем «drinks», который находится в моем masterViewController). Я думаю, это потому, что я пытаюсь использовать этот метод ниже внутри моего MasterViewController, а не в моей AppDelegate.mПытается сэкономить на plist, когда приложение завершается
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [searchPaths objectAtIndex:0];
NSString *writeableDBPath = [documentsDirectory stringByAppendingPathComponent:@"DrinkDirections.plist"];
[self.drinks writeToFile:writeableDBPath atomically:YES];
}
Я испытал это путем размещения 2 NSLogs(): один в методе applicationWillTerminate что I помещенный в мой masterViewController и один в методе applicationWillTerminate, который находится в моем AppDelegate.m. Журнал отображается только в консоли с той, что находится в AppDelegate.m. Поэтому, наконец, я не могу понять, как получить доступ к массиву напитков, который находится в моем MasterViewController из моего файла AppDelegate.m, поэтому я могу использовать метод applicationWillTerminate, который находится в моем приложении appDelegate.m, чтобы сохранить его на plist. Я напишу свой код appDelegate.m, который вызывает ошибку, потому что свойство drinks находится в MasterViewController.
AppDelegate.m (метод)
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [searchPaths objectAtIndex:0];
NSString *writeableDBPath = [documentsDirectory stringByAppendingPathComponent:@"DrinkDirections.plist"];
[self.drinks writeToFile:writeableDBPath atomically:YES]; //THIS LINE THROWS AN ERROR BECAUSE PROPERTY DRINKS IS ONLY ON MY MASTERVIEWCONTROLLER NOT MY AppDelegate
}
Это именно то, что я пытался сделать изначально, прежде чем я решил попробовать отправить массив в мой файл делегата и использовать метод там , Это отлично сработало для меня. Спасибо за ваше время. –