Приложение для iPhone, идеи объектно-ориентированного дизайна - PullRequest
0 голосов
/ 06 июля 2011

Я - Java-разработчик, изучающий Objective C для проекта IPhone, мой вопрос о дизайне ООП в Какао. У меня есть приложение, основанное на представлении, которое взаимодействует с веб-сервисом и получает XML, , анализирует его и сопоставляет его содержимое с соответствующим компонентом представления (например, если дата показывает вопрос с помощью DatePicker, если вопрос имеет 2 значения показать его с сегментированным элементом управления, если больше - с помощью pickerview..etc), так что это динамический вопросник со многими страницами.

Каков наилучший дизайн, возможный здесь, с учетом структуры какао, например, если я создаю класс «Соединение» для выполнения веб-запроса, могу ли я создать объект соединения из своего класса ViewController и использовать его? или я должен использовать классы deletegete для этого .. потому что мой класс будет включать методы, такие как:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
 [webData setLength: 0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
 [webData appendData:data];
}

Должны ли вышеуказанные реализованные методы помещаться в класс viewcontroller?

И второй вопрос, как я могу сделать дизайн для отображения ответа xml в связанные компоненты представления пользовательского интерфейса? Я хочу сделать код как можно более ориентированным на объект, а не слишком много, если в моем классе контроллера представления есть иное, но вместо этого он должен получить только, скажем, «объект uiview», заполненный необходимыми компонентами представления, и он просто покажет его. но сопоставление и рассуждение должно быть сделано где-то еще ... где я могу это сделать, а затем куда я могу поместить методы, например;

-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [itemArray count];
} 

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

Надеюсь, я смог прояснить себя.

Ответы [ 2 ]

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

Ваши объяснения понятны, да.Контроллер представления создает интерфейс между объектами вашей модели и вашими представлениями.Он отвечает за обновление представлений при изменении значений модели, а также отвечает на пользовательские события для обновления модели.

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

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

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

Удачи.

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

Для части 1 звучит так, как будто вы хотите создать класс фабрики / движка, который будет обрабатывать связь со службами и анализ данных.В этом объявлении заголовка класса вы захотите создать протокол (интерфейс в терминах java), который контроллеры представления будут реализовывать для методов делегата.Этот класс также будет иметь член с идентификатором типа, который будет содержать объект делегата для обратных вызовов.

Чтобы ответить на часть 2, вы можете заставить свой класс factory / engine создавать объекты во время синтаксического анализа и возвращать ихviewcontroller в указанных делегатах вызывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...