Получить переменную из функции void в Objective C - PullRequest
0 голосов
/ 09 марта 2011

Я ОЧЕНЬ новичок в разработке Objective C и iOS (например, 5 часов нового :-). У меня есть некоторый код, который вызывает API для аутентификации пользователя и возвращает простой OK или FAIL. Я могу получить результат для записи на консоль, но мне нужно получить этот результат как часть моего IBAction.

Вот код IBAction:

- (IBAction) authenticateUser
{
    [txtEmail resignFirstResponder];
    [txtPassword resignFirstResponder];

    [self performAuthentication];

    if (authResult == @"OK")

Мне нужно, чтобы authResult был результатом JSON (OK или FAIL). Вот код, который получает результат:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [connection release];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", responseString);
    [responseData release];

    NSMutableDictionary *jsonResult = [responseString JSONValue];
        if (jsonResult != nil) 
            {
                NSString *jsonResponse = [jsonResult objectForKey:@"Result"];
                NSLog(@"%@", jsonResponse);
            }
}

Большое спасибо за любую помощь и извините, если я упускаю что-то очевидное!

1 Ответ

1 голос
/ 09 марта 2011

Я немного сбит с толку относительно того, что здесь происходит ... похоже, ваш метод -performAuthentication должен запустить асинхронный сетевой запрос через NSURLConnection, а делегат вашего соединения -connectionDidFinishLoading: получает для определения результата запроса.Так хорошо до сих пор?Но ваш метод -authenticateUser ожидает, что authResult будет определен, как только вернется -performAuthentication.Если сетевой запрос асинхронный, этого не произойдет.Если я слежу за тобой, я думаю, тебе нужно сделать следующее:

  1. Исправить -connectionDidFinishLoading: так, чтобы он фактически устанавливал authResult на основе значения Result в jsonResponse.Я уверен, что вы все равно дойдете до этого.
  2. Измените -authenticateUser так, чтобы он не ожидал немедленного ответа.Вы должны дать сетевому запросу шанс сделать свое дело.
  3. Добавьте другой метод, возможно, с именем -authenticationDidFinish или что-то в этом роде.Все, что в настоящее время в -authenticateUser, от 'if (authResult ...' до конца) идет в этом новом методе.
  4. Вызовите новый метод из -connectionDidFinishLoading:.
  5. Исправьте вашСравнение строк. Если вы хотите сравнить две строки в Какао, вы скажете (например):

    if ([authResult isEqualToString: @ "OK") {}

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