MVC с веб-запросами - PullRequest
       13

MVC с веб-запросами

0 голосов
/ 12 июля 2011

Я написал свое первое приложение, которое использует веб-данные для создания пользовательского представления. Пока он работает, я не могу не думать, что, возможно, он не совсем следует концепции MVC (хотя я не уверен, что это влияет на то, как Apple одобряет приложения или нет).

У меня есть один контроллер представления с пользовательским классом представления, который реализует drawRect. Поскольку для drawRect требуются данные из Интернета, было вполне естественно выполнять всю загрузку внутри самого пользовательского класса представления.

Но как это обычно делается? Я предполагаю, что контроллер представления обычно должен обрабатывать загрузку, и что контроллер является делегатом для асинхронной загрузки, чтобы он мог упорядочивать представления и тому подобное на основе ошибок и т. Д. Вместо этого мой пользовательский класс представления является делегатом для обработки асинхронной загрузки. и это мне кажется плохо организованным; а может и нет?

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

1 Ответ

1 голос
/ 12 июля 2011

Apple не рассматривает ваш исходный код как часть процесса проверки в App Store, поэтому как вы будете разрабатывать свои классы, зависит от вас. Однако вы правы, полагая, что в архитектуре MVC представления не извлекают свои собственные данные и фактически никогда не знают, откуда поступают данные, которые они представляют. Уровень контроллера действует как мост между представлениями и объектами модели, так что именно там лежит ответственность за выборку данных.

Так что я думаю, что вы на правильном пути: используйте экземпляр подкласса UIViewController для получения данных. После этого вам решать, имеет ли смысл «подталкивать» или «извлекать» данные в создаваемый вами подкласс UIView.

В модели push, контроллер устанавливает переменные экземпляра представления, необходимые для представления данных. В модели pull представление обычно отправляет сообщения контроллеру для запроса данных перед рисованием. Типичный шаблон для этого в iOS - заставить контроллер принять протокол делегирования, объявленный в заголовке для вашего пользовательского класса представления. Затем представление будет пытаться получить данные при необходимости, сначала проверяя, реализует ли его делегат необходимые методы, а затем вызывая методы, если они доступны.

...