Рекомендации по настройке целевой программы c - основы - PullRequest
1 голос
/ 06 июля 2010

Я изучал цель C через книгу и учебные пособия, и хотя я многому научился и могу делать многое из того, что хочу, я все еще изо всех сил пытаюсь понять основную структуру своих программ.Вот конкретная вещь, которую я хочу сделать, но в итоге я теряюсь и растерялся.

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

Я могу заставить UIView делать некоторые из этих вещей и анимировать их с помощью блока, но я не понимаю, куда поместить кусочки кода.Я начинаю с основанного на представлении шаблона и создаю новый подкласс UIView.Я хотел бы, чтобы контроллер представления запрашивал карты и мог принимать пользовательский ввод для манипулирования картой.Я могу сделать кнопки и подключить их к IBActions нормально, но я должен поместить изменения размера и методы перемещения в объекте карты или в контроллере представления?Я хочу иметь возможность сказать что-то вроде: объявить новую карточку - сказать карточке «двигаться сюда» при нажатии кнопки и т. Д.

Я знаю, что это может звучать как действительно общий вопрос, и я 'Я не ищу, чтобы кто-то написал мой код для меня, но мне просто нужен какой-то общий (или конкретный!) совет.

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Вообще говоря, ваше программное обеспечение должно следовать шаблону модель-представление-контроллер .

В переводе это, вероятно, означает, что what представления должно хранитьсяв представлении.т. е. изображение лица карты, стоимость карты и т. д.

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

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

В идеале именно такпоток программы работает:

  1. Пользователь нажимает кнопку вида
  2. Вид подключен к методу в контроллере
  3. Контроллер оценивает состояние программы и вызываетметод в модели (например, сделка)
  4. Модель выполняет некоторую логику и возвращает информацию
  5. Контроллер оценивает возврат из модели и обновляет представление
  6. Представление перерисовываетсясам по себе на основе нового обновления от контроллера

Это довольно простое объяснение, но, надеюсь, достаточно хорошее, чтобы уберечь вас от неприятностей.Я настоятельно рекомендую прочитать документацию Apple MVC.

0 голосов
/ 07 июля 2010

Спасибо за совет, Стивен.Я читал документацию по MVC и пытался ее освоить, но это очень много!

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

Я создал приложение, основанное на представлении, которое начиналось с FlashCard, поэтому я бесплатно получил viewConroller (объект?) И файл .xib.Из того, что я понимаю, это заключает в себе как мой взгляд, так и мой контроллер.Итак, вот моя структура, я думаю:

Контроллер - FlashCardViewController Имеет методы действий для кнопок в моем файле .xib

Вид - .xib Имеет кнопки для запроса новой колоды карт для каждой основнойматематический оператор, а также получение новой карты из текущей колоды и поля для отображения информации моей карточки (операнды, оператор, результат)

Модель - карта Подкласс UIView.У него есть свойства для операндов и т. Д., Плюс материал, который он наследует от UIView.- Палуба Подкласс NSObject.У этого есть единственное свойство, называемое cards, которое является NSMutableArray.У него есть метод для генерации колоды карт со всеми возможными значениями операндов, основанный на операторе, полученном из заголовка кнопки.Если вы нажмете кнопку «+», то получится колода + флеш-карт.У него также есть метод выбора карты из колоды - вы передаете ей колоду, и она возвращает случайный объект карты и удаляет карту из колоды.

Все это прекрасно работает - я могу генерировать новые колодыи получить карту.Затем я заставил метод initWithFrame карты определять фрейм, и когда я получаю новую карту из текущей колоды в контроллере, я добавляю вид карты в вид контроллера.Он показывает нормально.

Мои вопросы сейчас: если я хочу переместить карту куда-нибудь еще в поле зрения, должен ли этот метод быть в контроллере?или колода?или карта?У меня есть части в нужных местах?Когда я генерирую новый объект карты (выбирая его из колоды) в контроллере с помощью метода IBAction, могу ли я получить доступ к этой карте другим методом в контроллере - будет ли он доступен?Например, если я нажму еще одну кнопку для перемещения карты по экрану ...

Спасибо, что прочитали мой многословный ответ!Любой совет по-прежнему приветствуется!

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