2015-06-02 2 views
0

Я создаю приложение в swift, которое взаимодействует с API. Существует два способа выхода пользователя из системы: нажатие кнопки выхода или получение ответа 401 при вызове API.Swift logout process

Я планирую использовать NSNotificationCenter в своем классе API для трансляции события, когда получен безуспешный ответ, поэтому общая обработка таких вещей, как 401, 400, 500, может обрабатываться в одном месте за пределами класса API.

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

Моя проблема, так как логика не внутри контроллера зрения я не уверен, как я могу представить контроллер представления Войти, как у меня нет доступа к методу self.presentViewController

+0

Ваш класс может сообщить делегату приложения представить контроллер представления или переключить ваш контроллер корневого представления. (См. [Этот пример] (http://stackoverflow.com/a/24666140/1445366). –

ответ

0

Вы будете нуждаться передать эту ответственность диспетчеру просмотра.

Как я обработал это в прошлом, используется наблюдатель с ключом (или RAC) для контроля активного токена. Когда этот токен уходит, я заменяю корневой контроллер.

Где вы это делаете, это зависит от того, как вы структурировали вещи. Делегат приложения - разумное место.

+0

Спасибо, что я довольно близко сейчас. Я создал событие через центр уведомлений, который обрабатывается в делегате приложения. что я не могу заставить текущий контроллер представления использовать для представления контроллера входа в систему. Поскольку контроллер корневого представления неактивен, я получаю сообщение об ошибке «Предупреждение: попытка представить в чей взгляд не в иерархии окон! " –