iPhone Popping View Controller перед ViewDidAppear - PullRequest
0 голосов
/ 03 августа 2011

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

1 Ответ

2 голосов
/ 03 августа 2011

Сначала объявите переменную enum:

typedef enum {
    StatusLoggedOut,
    StatusAttemptingLogin,
    StatusLoggedIn
} LoginStatus;

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

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

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

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

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

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