5

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

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

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

View контроллеры

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

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

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

основных данных

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

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

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

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

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

ответ

2

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

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

Привет, Роберт, спасибо. Итак, есть ли что-то особенное в detailViewController, чтобы при отображении модально поля стали редактируемыми? – Glynton

+0

Добро пожаловать. Я не думаю, что есть какой-либо автоматический способ сделать это. У UIViewController есть свойство редактирования, которое можно использовать для переключения редактируемого состояния через setEditing: animated :. Если вы хотите использовать тот же DetailViewController для отображения и редактирования, вы можете вызвать [dvc setEditing: YES animated: NO] после вызова presentModalViewController: animated :. Затем вам нужно реализовать setEditing: animated: в DetailViewController и обновить соответствующие элементы управления, например self.someTextField.enabled = edit. –

+0

«В iOS нет привязки данных» - больше не верна: https://www.youtube.com/watch?v=88DkI8ZfEkg - выйдет к концу года (некоторые лицензии на ОС) – Michael

0

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

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

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

+0

... так Привязки больше инструмента IB, где у вас есть массив данных с лицами, установленных для просмотра объектов? Программный эквивалент переопределяет таблицу (UITableViewCell *) tableView: (UITableView *) tableView – Glynton