Делегаты и уведомления в Objective-C - PullRequest
1 голос
/ 08 августа 2011

В моем AppDelegate я загружаю некоторые данные из фида JSON. Я загружаю расписание «сейчас / следующее / позже» для нескольких каналов. У меня есть три разных контроллера представления для каждого сейчас, потом и позже. В каждом контроллере представления пользователь может добавлять / удалять каналы, поэтому, когда это происходит, вновь добавленные данные канала должны быть снова загружены.

Поскольку данные загружаются в AppDelegate и хранятся там, как я могу передать их трем контроллерам представления? Должен ли я реализовать три отдельных делегата? Имейте в виду, что при добавлении нового канала его данные необходимо снова загружать (что я делаю сейчас вне AppDelegate).

Любая помощь, пожалуйста?

Спасибо

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Тостор ответит правильно, и, как он говорит, есть несколько способов сделать это. Одним из них является вызов класса доступа к данным и изменение значений ИЛИ прослушивание изменений значений. В последующем, Руководство по программированию *1001* Наблюдение значения ключа говорит следующее:

КВО особенно полезен для связи между моделью и уровни контроллера в приложении.

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

Другой способ - сделать зависимость явной, возможно, передав класс доступа к данным, сохраненный в вашем делегате приложения. См. Вопрос об объектно-ориентированном дизайне, iPhone .

1 голос
/ 08 августа 2011

Это в основном вопрос стиля, и ваш подход не является недействительным как таковой.

Я бы сделал это по-другому, хотя AppDelegate не предназначен для использования в качестве рабочей лошадки и имеет несколькоAppDelegates в то же время просто невозможно.

Вот некоторые мысли о том, как это можно сделать (хотя, конечно, это не единственный правильный путь):

  • Во-первых, я 'Использовать базовые данные или другое хранилище, доступное из любого места в вашем приложении.
  • Тогда, возможно, я бы ввел некоторый класс "контроллера данных" (может быть, синглтон).Этот класс должен обрабатывать как загрузку данных, так и распространение этих данных в ваши контроллеры представления в соответствии с запросом.
  • Имея для этого один центральный контроллер, вы гарантируете, что данные загружаются только один раз, потому что контроллер точно знаеткакие данные уже есть в наличии.
  • Ваши контроллеры представления больше не будут нести ответственность за управление загрузками и не будут получать доступ к данным на диске самостоятельно.Они просто отправят запрос вашему контроллеру данных и получат обратный вызов, когда запрошенные данные будут доступны - независимо от того, были ли они уже на диске или были загружены по этому случаю.
  • Это делает ваши венчурные капиталы тонкими и сфокусированными и уменьшает боль при внесении изменений в ваш интерфейс.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...