Массив рецептов


Массив рецептов

Нельзя ли было просто изменить AppDelegate так, чтобы он получал массив рецептов от RootViewController и сохранял его в делегате (вместо регистрации на оповещения о переходе в фоновый режим)?

Да, можно. Это скорее вопрос стиля и архитектуры, чем чего-либо еще. Непосредственно сейчас AppDelegate ничего не знает ни о нашем списке plist, ни о массиве drinks, ни даже о RootViewController, если уж на то пошло (кроме отображения его на экране). Пожалуй, предоставление всех этих данных AppDelegate нарушает принцип инкапсуляции. Так как нам нужно сохранить всего один массив, это вряд ли создаст серьезные проблемы, но при большом количестве представлений, сохраняющих информацию, или сложном коде сохранения часто бывает удобнее оставить всю информацию в соответствующем классе, вместо того чтобы забивать ей AppDelegate. Однако с технической точки зрения оба решения работают.

Почему мы выполняем регистрацию и отмену в методах viewDidLoad и viewDidUnload, а не в методах Appear?

Проблема в том, когда и как часто вызываются эти методы. viewWillAppear вызывается перед каждым отображением приложения. Начинается все хорошо, мы получаем вызов перед отображением табличного представления и можем провести регистрацию. Однако метод viewWillDisappear будет вызван сразу же после отображения детализированного представления или представления для ввода информации (так как представление RootViewController при этом скрывается). Если отменить регистрацию в этом месте, мы не получим оповещение о переходе в фоновый режим в том случае, если пользователь выйдет из приложения во время просмотра рецепта.

Допустим, пользователь ввел новый рецепт, вернулся к RootViewController и выбрал свой коктейль, чтобы убедиться в правильности ввода. Мы отображаем детализированное представление, пользователь доволен — он выходит из приложения. А так как RootViewController отменил регистрацию на оповещения о переходе в фоновый режим, рецепт теряется. По этой причине мы используем методы load и unload, которые вызываются при загрузке или выгрузке представления из .xib. Так как это представление используется на протяжении всей работы приложения, они будут вызваны только при запуске и завершении работы.

«Build and Run», почему нужно повторно выбирать значок DrinkMixer?

Это связано с тем, как мы сохраняем данные. Данная тема более подробно рассматривается в следующей главе; проблема заключается в том, что при выборе команды «Build and Debug» Xcode компилирует и устанавливает приложение в Simulator. Это означает, что измененный список plist будет заменен исходным списком приложения и введенный рецепт будет потерян. А это, как вы наверняка согласитесь, очень, очень печально.
  • Дата: 23-12-2014, 16:22

Предыдущие статьи сайта:

Понравилась статья? Ставь лайки, рассказывай друзьям!



Отзывы о статье: Массив рецептов

Технологии, секреты и фишки Apple: Iphone, iPad, iPod