Где файл AppDelegate вписывается в MVC? - PullRequest
11 голосов
/ 03 ноября 2011

Я учусь программировать на iPhone / iPad.Я верю, что понимаю концепцию MVC;у меня возникают трудности с пониманием того, как некоторые файлы в обычном приложении для iPhone / iPad вписываются в MVC.

Когда вы создаете новое приложение с помощью шаблона «Просмотреть приложение», AppDelegate.mи файл AppDelegate.h создан.

Это файл модели, вида или контроллера?Я предполагаю, что это на самом деле ничего из этого.Хотелось бы увидеть диаграмму или блок-схему процесса, которая показывает, к какой категории относится каждый файл в приложении.

Ответы [ 4 ]

10 голосов
/ 03 ноября 2011

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

Я бы не стал слишком сильно беспокоиться о попытке классифицировать каждый файл в MVC, некоторые просто не подойдут идеально, если вообще будут.

2 голосов
/ 03 ноября 2011

Делегат приложения является объектом контроллера. По умолчанию он является владельцем и контроллером главного окна - представления - в приложении iOS. Делегат приложения получает сообщения от объекта, представляющего - или моделирующего - само приложение (экземпляр UIApplication). Он является посредником между объектом приложения, который является точкой контакта между приложением и системой, и отображением приложения.

1 голос
/ 03 ноября 2011

Я рассматриваю AppDelegate как контроллер, потому что такой код

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[application setStatusBarHidden:YES withAnimation:NO];
return YES;
}

AppDelegate - это место для настройки связей между моделями и видами.
В AppDelegate вы размещаете код, специфичный для вашего приложения.
Представление и модель должны иметь возможность жить в другом приложении (например, в классе UIView), поскольку они не зависят от приложения.
Это более очевидно в приложении Mac для настольных компьютеров, в этом делегате есть что еще сделать.

0 голосов
/ 13 марта 2015

Это старый вопрос, но я только что задал себе тот же вопрос сегодня. Я думаю, что класс AppDelegate нельзя классифицировать как просто Controller . Он контролирует окно и устанавливает свой корневой контроллер, чтобы его можно было классифицировать как View Controller (примечание: UIWindow наследует от UIView). Но он также выполняет больше задач, связанных с моделью, таких как сохранение данных при завершении работы приложения. Таким образом, его можно считать контроллером модели или также связанным с уровнем доступа к данным.

Он также отвечает за обработку открытия URL. Это может вызвать изменение вида, но также определенно потребует выполнения задач, связанных с моделью, таких как анализ, сохранение, обновление, аутентификация и т. Д. Если представление / модель связаны с помощью KVO, простое обновление модели может привести к обновлению требуемых видов. Я чувствую, что это будет гораздо лучше. Кроме того, тот факт, что по умолчанию весь стек основных данных добавляется в AppDelegate, устраняет его от того, чтобы быть связанным только с View.

Думаю, тот факт, что он отвечает за все, что связано с приложением, приводит к тому, что оно имеет несколько целей. Возможно, именно поэтому разработчики в конечном итоге бросают все и вся здесь. Это менеджер приложения как в смысле корневого контроллера, уровня сервиса приложения, так и менеджера модели приложения.

Поскольку AppDelegate является точкой входа в приложение (для разработчика), имеет смысл говорить об этом с точки зрения приложения. Приложение завершается, приложение входит в фоновый режим и т. Д. Мы говорим о приложении как о Model сущности.

...