2011-08-02 4 views
0

В моем приложении у меня есть логин, и если вход успешно завершен, пользователь получает идентификатор сеанса. Когда сеанс пользователя истекает, и они запрашивают страницу с истекшим сеансом, бэкэнд сообщает, что срок действия сеанса и пользователь должен войти в систему, а приложение вызывает popToRootViewControllerAnimated (страница входа). Я использую класс NSURLConnection для планирования обратных вызовов для моего UIViewController, когда загрузка завершена. Проблема, с которой я сталкиваюсь, заключается в том, что я планирую NSURLConnection во время моего viewDidLoad и отчеты о подключении перед представлением контроллера представления. Я бы поставил NSURLConnection в viewDidAppear, но я не хочу обращаться к серверу каждый раз, когда появляется представление. Кто-нибудь знает, как лучше всего решить эту проблему?iPhone Popping View Controller перед ViewDidAppear

ответ

2

Во-первых, объявить переменную перечислимую:

typedef enum { 
    StatusLoggedOut, 
    StatusAttemptingLogin, 
    StatusLoggedIn 
} LoginStatus; 

Затем добавьте переменную-член в ваш контроллер представления для сохранения состояния входа. Затем, внутри viewDidAppear: вы можете сделать это:

- (void)viewDidAppear:(BOOL)animated 
{ 
    if (loginStatus == StatusLoggedOut) { 
     loginStatus = StatusAttemptingLogin; 
     // start the NSURLConnection 
    } 
} 

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

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

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

+1

+1 очень хорошее предложение относительно модального контроллера для входа в систему. – InsertWittyName

Смежные вопросы