Как отложить метод? - PullRequest
0 голосов
/ 15 июля 2009

Я работаю над приложением для iPhone. Когда приложение запускается, я аутентифицируюсь, устанавливаю соединение Restful, получаю данные в виде XML-файла, анализирую их и затем отображаю в виде табличного представления. Здесь моя проблема. Если пользовательская информация уже хранится в приложении или если она жестко закодирована в коде, приложение берет имя пользователя и пароль для аутентификации и переходит к отображению данных в табличном формате. Я до сих пор проводил тестирование с жестко закодированными данными. Теперь я хочу отобразить другое представление, которое запрашивает имя пользователя и пароль, если его нет в приложении ... т.е. Я хочу, чтобы имя пользователя и пароль были динамическими, а не статическими. В моем случае, когда пользователь занят вводом имени пользователя и пароля, метод "viewDidLoad" пытается установить соединение с сервером с пустым именем пользователя и паролем, при этом соединение с сервером и загрузка таблицы не выполняются. Но если я запускаю приложение во второй раз, приложение находит введенные ранее имя пользователя и пароль и прекрасно загружает таблицы.

Есть ли способ отложить процесс подключения к серверу, если приложение не находит имя пользователя и пароль? Как я могу сигнализировать о методе подключения к серверу после того, как пользователь ввел свое имя пользователя и пароль?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 15 июля 2009

Можете ли вы опубликовать часть своего кода? Трудно спекулировать, не видя, что происходит, но я все равно попробую.

Вам нужно переместить код, к которому вы подключаетесь к серверу, из viewDidLoad и поместить его в метод обратного вызова или что-то в этом роде. Я бы предложил выдать предупреждение с полем имени и пароля, сделать контроллер представления делегатом предупреждения, а затем подключить функцию clickedButtonAtIndex к серверу.

Пример:

-(void)viewDidLoad {
    UIAlertView *loginAlert = [[UIAlertView alloc] initWithTitle:@"Login" message:@"Please enter your username and password below" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login",nil];

    //You might have to do some fiddling with the frame sizes to make it fit in the alert.
    UITextField *userNameField = [[UITextField alloc] initWithFrame:CGRectMake(originX, originY, lengthX, lengthY)];
    userNameField.placeholder = @"User Name";
    [loginAlert addSubview:userNameField];
    //loginAlert will retain this so we release it now.
    [userNameField release];



    [UITextField *passwordNameField = [[UITextField alloc] initWithFrame:CGRectMake(originX, originY, lengthX, lengthY)];
    passwordNameField.secureTextEntry = YES;
    [loginAlert addSubview:passwordNameField];
    [passwordNameField release]

    //This line tells the iPhone to stretch out your AlertView so it's big enough for your two textViews, we use 0 and 130 respectively but we only have one text field.
    CGAffineTransform myTransform = CGAffineTransformMakeTranslation(stretchX, stretchY);

    [loginAlert setTransform:myTransform];
    [loginAlert show];
    [loginAlert release];
}


//Implement this method, it will be called when the user clicks the "login" button on your alert.
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    //Usually if they click cancel you do nothing, thats buttonIndex 0
        if(buttonIndex == 1) {
        //Connect to the server with the correct login and password.
    }
}
0 голосов
/ 15 июля 2009

Как только вы отобразите представление в окне, ВСЕГДА будет вызываться ViewDidLoad, поэтому его называют viewDidLoad ... Что вам нужно сделать, это создать другое представление для шагов входа в систему, а затем, когда пользователь завершит вход в систему, они нажмет кнопку входа в систему, которая будет выдвигать вид, который подключается к вашему отдыху. Если пользовательские данные уже представлены, пропустите страницу входа все вместе и перейдите прямо к представлению таблицы

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