Вопросы о структуре приложения iPhone - Основные данные, Представления, Модальные Представления и т. Д. - PullRequest
5 голосов
/ 03 ноября 2010

Примерно месяц назад мы с женой придумали хорошую идею для приложения для iPhone, поэтому я задумался о том, как приложение будет работать с точки зрения пользователей, и примерно неделю назад я впервые открыл XCodeи начал развиваться.

Прежде чем я слишком увлекся написанием приложения, я хочу убедиться, что у меня в голове есть некоторые ключевые понятия, в частности связанные с архитектурой.

К вашему сведению, как принцип, который яЯ хотел бы попытаться создать как можно большую часть своего приложения программным способом (особенно пользовательским интерфейсом), чтобы у меня было полное понимание того, что происходит.Позже я мог бы использовать IB как инструмент для ускорения разработки пользовательского интерфейса (в данный момент это применимо, потому что я использую TableViews, а не статические представления).

View Controllers

  • Таким образом, UINavigationControllers, как правило, не подклассифицированы и создаются как свойство в AppDelegate и являются основным «подвидом» MainWindow.XIB.

  • UINavigationController управляет стеком представлений и обычно запускается с помощью корневого контроллера представлений.

  • На контроллер навигации обычно ссылаются и отправляют сообщенияиз текущего / верхнего контроллера вида как [self navigationcontroller], который является свойством только для чтения родительского класса UIViewController.

Базовые данные

  • Контекст управляемого объекта является главной контрольной точкой для доступа к данным в модели, но обычно он не используется напрямую, а вместо этогозапросы выборки используются для возврата массивов, наборов или словарей объектов данных, которые затем используются контроллерами представления для представления и манипулирования данными.

  • контекст создается как свойство в приложенииделегат и затем передается корневому контроллеру представления при запуске, который сам передает его последующим представлениям в стеке, прежде чем сообщить навигационному контроллеру об изменении представления (например, при касании ячейки).

Итак, мне потребовалась неделя, чтобы добраться сюда, я могу создать свою модель, заполнить ее данными и отобразить в виде таблицы, но я не смог найти много наМодальные представления, когда вы хотите редактировать данные, в частности, как проектировать модальные представления (если есть какое-то конкретное отличие от обычных представлений)?

Кроме того, я не совсем уверен в полной «привязанности» данных к просмотруобъекты что он делает и как это сделать программно?

Большое спасибо за ваши комментарии, предложения заранее.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Представление становится модальным, когда оно отображается с использованием presentModalViewController: animated. Вы можете передать модель для редактирования перед представлением модального вида.

DetailViewController dvc = ...;
dvc.model = model;
dvc.delegate = self; // if you want to use a delegate pattern.
[self presentModalViewController:dvc animated:YES];

Поскольку модель, которую вы хотите редактировать, доступна в контроллере модального представления, вы можете установить значения в viewDidLoad. На платформе iOS нет привязки данных, что означает, что вам необходимо обновить вид и модель вручную.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.someTextField.text = self.model.someText;
}

При работе с модальным представлением необходимо учитывать, что вы должны предоставить способ отклонить его. Например. с помощью навигационной панели сверху с кнопками Отмена и Сохранить. Увольнение модального контроллера представления выполняется с помощью:

[self dismissModalViewControllerAnimated:YES];

Можно отклонить модальное представление из контроллера модального представления, но это также означает, что такой модальный контроллер должен быть в состоянии сохранить данную модель. Я лично использовал бы обратный вызов к представляемому контроллеру, давая ему знать, чтобы сохранить или отменить, а также обрабатывая отклонение модального представления. Это можно сделать с помощью шаблона делегата. Поэтому, когда пользователь нажимает Сохранить, вы можете обновить модель, а затем уведомить делегата.

- (IBAction)save:(id)sender {
    self.model.someText = self.someTextField.text;
    [self.delegate detailViewControllerDidSave:self];
}

А в докладчике есть такой метод:

-(void)detailViewControllerDidSave:(DetailViewController *)controller {
  // save the model
  [self dismissModalViewControllerAnimated:YES];
}
0 голосов
/ 03 ноября 2010

Некоторые ответы, исходя из моих знаний о взглядах / данных.У меня пока нет опыта работы с CoreData, поэтому я не буду отвечать на эту часть.

  • Модальное представление - это просто обычное представление.Но его размер может немного отличаться, поскольку он покрывает некоторые элементы пользовательского интерфейса, которые не будут покрываться видом, выдвигаемым в контроллере навигации.

  • Для «привязки» данных к представлениямвы уже сделали это, если заполняете табличное представление.В контроллере реализован ряд методов «источника данных», в которых вы предоставляете данные из вашей модели в представление (шаблон MVC).

...