Как общаться между классами, когда задействованы как данные, так и пользовательский интерфейс? - PullRequest
0 голосов
/ 14 июля 2010

Я работаю над приложением для iPhone, основанным на навигации, которое взаимодействует с REST API, используя OAuth, и я хотел бы знать, как мои классы должны лучше всего общаться друг с другом.У меня есть несколько UITableViews, несколько UITableViewDataSources, класс API и контроллер представления, который обрабатывает аутентификацию в веб-представлении.

Вот как у меня сейчас структурированы вещи:

  • MyUIApplicationDelegate владеет экземпляром класса, который знает, как взаимодействовать с REST API
  • . Я могу попросить класс API вызвать метод REST, и он возвращается с данными (он переносит ASIHTTPRequest s для прозрачной обработки OAuth, поэтому в настоящее время он не знает, какой объект запрашивает данные)
  • Если пользователь не аутентифицирован, я могу попросить класс API инициировать процесс OAuth
  • Можно открыть диалоговое окно OAuth, и приложение предоставило доступ к API от имени пользователя.

Проблема, с которой я сталкиваюсь, заключается в том, что моим UITableViewDataSources необходимо связаться с классом API, чтобы получить ихданные, но аутентификация может потребоваться в первую очередь, что включает модальное представление аутентификации, представленноеКонтроллер ew.

  1. Было бы лучше, чтобы каждая модель UITableViewDataSource имела собственный экземпляр класса API, или класс API должен быть одноэлементным?

  2. Если каждой модели принадлежит экземпляр класса API, как он должен сообщать контроллеру представления о необходимости аутентификации?

  3. Если класс API является одноэлементным, какДолжен ли он взаимодействовать с несколькими моделями и контроллерами представления для представления диалога аутентификации?Делегаты для каждого?Опубликовать NSNotifications?

  4. Какой-то другой способ, о котором я не задумывался?

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

1 Ответ

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

Обычно я использую синглтон именно так, как вы описываете, и он работает хорошо. Вот как бы я ответил на ваши вопросы.

  1. Singleton

  2. N / A. Используйте синглтон.

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

  4. Я думаю, вы на правильном пути.

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