Почему iPhone выполняет оба этих оператора if в файле .m контроллера представления? - PullRequest
0 голосов
/ 08 августа 2009

Когда вызывается логин IBAction, предполагается, что он использует ответ от SOAP Web Services либо true, либо false, false означает, что пользователь не авторизован для использования приложения. Я использую эти операторы if после получения ответа, но по какой-то причине он выполняет как true, так и false if.

{
    [soapResults appendString: string];
    NSLog(soapResults);

    if (soapResults = @"true")
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:soapResults delegate:self cancelButtonTitle:@"Try Again",nil otherButtonTitles:nil];
        [alert show];
        [alert release];
        [soapResults release];
        soapResults = nil;
        [loginIndicator stopAnimating];
        loginIndicator.hidden = TRUE;
        loggedinLabel.text = usernameField.text;
        loggedinLabel.textColor = [UIColor blackColor];
        NSLog(@"Valid Login"); 
    }
        if (soapResults = @"false")
        {
            NSLog(@"Invalid Login");
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:soapResults delegate:self cancelButtonTitle:@"Try Again",nil otherButtonTitles:nil];
            [alert show];
            [alert release];
            [soapResults release];
            soapResults = nil;
            [loginIndicator stopAnimating];
            loginIndicator.hidden = TRUE;
        }





}

Пожалуйста, помогите

1 Ответ

2 голосов
/ 08 августа 2009

В операторах if есть только один знак равенства. Это присваивает строку переменной soapResults, которая заставляет оператор if вычислять строку (которая всегда будет истинной).

if (@"true")

Вместо этого используйте два знака равенства для сравнения.

if (soapResults == @"true")

Некоторые избегают этой распространенной проблемы, всегда помещая переменную в конец сравнения.

if (@"true" == soapResults)

Таким образом, если вы забудете второй знак равенства, это вызовет ошибку компиляции, которую гораздо легче найти.

Обновление: , как любезно отметили комментаторы, вам не следует сравнивать строки Objective-C с помощью оператора ==. Вместо этого используйте метод isEqualToString.

if ([soapResults isEqualToString:@"true"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...