Проблемы с пониманием viewControllers в iOS

Я новичок в obj-c/iOS, и у меня возникают проблемы с концептуальным пониманием, по крайней мере, viewControllers. Я читал много Apple Doc, я даже использовал viewControllers в некоторой степени в xCode, но я до сих пор не совсем понимаю, что они из себя представляют, или как лучше их использовать.

Я был разработчиком AS3 в течение многих лет, поэтому мой разум работает с контекстом MovieClips/Sprites и списком отображения, чтобы вывести графику на экран.

Хорошо, так из моего понимания...

  1. ViewController - это своего рода класс, который каким-то образом обрабатывает графику, а затем позволяет вам что-то с ними делать?? Что это в самом простом смысле?
  2. Вы, кажется, добавляете viewControllers в класс Window, что, я думаю, немного похоже на добавление объекта отображения в список отображения?
  3. Что делает ViewController для вас в самом простом смысле?
  4. Есть ли определенные вещи, которые вы определенно не можете сделать с ними или не должны делать с ними?
  5. Должны ли viewControllers быть подключены каким-либо образом к остальной части платформы iOS для работы (кроме добавления в окно).
  6. Как именно они используют данные? (Я читал о MVC, я понимаю, что концептуально это немного другой вопрос), насколько я понимаю, вы не жестко кодируете данные в viewController, так как же viewController получает доступ к статическим данным?
  7. Допустим, я просто хотел вывести изображение на экран, какую именно роль в этом процессе сыграет viewController? это просто что-то, что обрабатывает только один небольшой аспект этого процесса, или все шоу и все?
  8. Один viewController обрабатывает несколько изображений? это как термин, "контроллер" для всех изображений, представленных на экране, или он обрабатывает одно изображение за раз?
  9. Что такое соединение viewControllers с изображениями, которые оно обрабатывает? он содержит ссылки на них?

Я использую платформу Sparrow, которая помогает, но я все еще хотел бы иметь возможность разобраться, что такое viewControllers, поэтому я знаю, как их правильно использовать.

Ха, я прошу прощения за вышесказанное, я знаю, это должно выглядеть, как будто я полностью сбит с толку:) спасибо за любой совет

3 ответа

Решение

Надеюсь, это поможет вам:

  1. ViewController - это своего рода класс, который каким-то образом обрабатывает графику, а затем позволяет вам что-то с ними делать??

    Это связующее звено между представлением (Xib-файл) и данными (может быть CoreData или все, что вы используете в бэкэнде). Все элементы пользовательского интерфейса, которые вы используете в представлении, вы обычно определяете как свойства в контроллере для получения доступа к ним.

  2. Что это в самом простом смысле? Вы, кажется, добавляете viewControllers в класс Window, что, я думаю, немного похоже на добавление объекта отображения в список отображения?

    Я действительно не знаю AS3, поэтому я не могу сравнить списки отображения с ViewControllers. Но в основном ViewControllers предназначены для обработки различных типов переходов между представлениями и доступа (установки / чтения) к данным, которые отображаются в представлении.

  3. Что делает ViewController для вас в самом простом смысле?

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

  4. Есть ли определенные вещи, которые вы определенно не можете сделать с ними или не должны делать с ними?

    Всегда трудно удержать границу между моделью и контроллером. Они довольно близки друг к другу. Поэтому я обычно пытаюсь перенести все логические элементы (например, вычисления, доступ к базе данных и т. Д.), Это больше относится к части модели. Но, конечно, вы используете эти внешние классы в контроллере.

  5. Должны ли viewControllers быть подключены каким-либо образом к остальной части платформы iOS для работы (кроме добавления в окно).

    Ну, как вы уже написали, ViewController должен быть подключен к представлению. Иначе это не имело бы особого смысла. Существуют различные подтипы UIViewController, такие как UINavigationController, где вам, вероятно, нужно перезаписать некоторые другие методы, чтобы обеспечить всю функциональность, требуемую этими специальными подтипами.

  6. Как именно они используют данные? (Я читал о MVC, я понимаю, что концептуально это немного другой вопрос), насколько я понимаю, вы не жестко кодируете данные в viewController, так как же viewController получает доступ к статическим данным?

    Могут быть разные подходы для хранения данных. Простейшим способом было бы хранить данные непосредственно в UIViewController. Это может быть пользовательский класс, который является контейнером данных. Все изменения напрямую записываются в этот класс и отображаются UIViewController. Но в большинстве случаев имеет смысл использовать CoreData (который отвечает за чтение / запись данных в базу данных sqlite). Вы можете рассматривать CoreData как свою модель, и UIViewController получает оттуда данные и передает данные, которые UIViewController получил из View, обратно в него.

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

    UIViewController будет хранить внутреннее Свойство (UIImageView *), которое находится в Интерфейсном Разработчике, связанном с UIImageView, который вы создали в Xib-файле. Так что над этим свойством вы можете изменить через свой контроллер изображение.

  8. Один viewController обрабатывает несколько изображений? это как термин, "контроллер" для всех изображений, представленных на экране, или он обрабатывает одно изображение за раз?

    Да, это не большая проблема. Вы можете иметь столько изображений, сколько хотите. Вам просто нужно иметь свойства, определенные в UIViewController и связанные с View.

  9. Что такое соединение viewControllers с изображениями, которые оно обрабатывает? он содержит ссылки на них?

    Да, это как ссылка на UIElement. Затем вы можете изменить любое свойство UIImageView, которое вы хотите, прямо из UIViewController

Несколько полезных ссылок:

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

http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

Хорошо, в основном контроллер управляет коллекцией представлений. Он также извлекает данные из вашей модели и устанавливает состояние представлений. Важно отметить, что представления ничего не знают о вашей модели (ваших данных), а модель ничего не знает о ваших представлениях. Контроллер также получает события от представлений и решает, как изменить вашу модель соответственно. По сути, это управление синхронизацией между вашими представлениями и моделью.

Существуют технологии, которые помогают автоматизировать это, такие как KVO и привязка значения ключа. Поиск Google поможет вам там.

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

Я рекомендую вам проверить: https://stackru.com/questions/1939/how-to-articles-for-iphone-development-and-objective-c

Вот ответы на ваши вопросы:

  1. Нет, это не обрабатывает графику. Это контроллер шаблона проектирования MVC. Он обрабатывает жизненный цикл своего содержимого (например, представлений) и связанных данных.
  2. UIViewController устанавливается как корень UIWindow, Например, UINavigationController это подкласс UIViewController это стеки UIViewController для того, чтобы разобраться с навигацией.
  3. Ответ в (1)
  4. Попытайтесь быть более конкретным с этим вопросом, пожалуйста.
  5. Как уже отмечалось, это полезно, если вы используете уже встроенные компоненты, такие как UINavigationController или же UITabBarController,
  6. Например, вы можете иметь данные в переменных экземпляра и отображать их в содержании UIView,
  7. UIView прикреплен к вашему UIViewController будет содержать UIImageView, Ваш UIViewController будет иметь связь с ним, чтобы любые изменения, которые вам нужны, например, изменение изображения, когда пользователь нажимает кнопку.
  8. Может содержать несколько UIViewsи, следовательно, несколько UIImageViews (это подкласс UIView)
  9. Как прокомментировано, они будут содержаться на UIImageView и будет связан программно или с IBOutlet,
Другие вопросы по тегам