2009-08-08 7 views
0

Lorsque la connexion IBAction est invoquée, elle est censée utiliser une réponse de SOAP Web Services soit vrai soit faux, faux signifiant que l'utilisateur n'est pas autorisé à utiliser l'application. Je l'ai en utilisant ces instructions si après avoir reçu la réponse, mais pour une raison quelconque, il fonctionne à la fois vrai et faux ifs.Pourquoi l'iPhone exécute-t-il ces deux instructions if dans un fichier contrôleur .m?

{ 
    [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; 
     } 





} 

S'il vous plaît Aide

Répondre

2

Il n'y a qu'un seul signe égal dans les if déclarations. Cela assigne la chaîne à la variable soapResults qui provoque l'instruction if pour évaluer la chaîne (qui sera toujours true).

if (@"true") 

Utilisez plutôt deux signes égaux pour effectuer la comparaison.

if (soapResults == @"true") 

Certains évitent ce problème commun en plaçant toujours la variable à la fin de la comparaison. De cette façon, si vous oubliez le deuxième signe égal, cela provoquera une erreur de compilation qui sera beaucoup plus facile à trouver.

Mise à jour: Comme les commentateurs l'ont indiqué, vous ne devriez pas comparer les chaînes Objective-C en utilisant l'opérateur ==. Au lieu de cela, utilisez la méthode isEqualToString.

if ([soapResults isEqualToString:@"true"]) 
+0

[soapResults isEqualTo: @ "true"] peut-être? –

+1

Bon oeil! Quoi qu'il en soit, en ce qui concerne la comparaison: mieux utiliser [soapResults isEqualToString: @ "true"] sinon il sera toujours faux (car le signe égal n'est pas un bon moyen de comparer les chaînes en Obj-C). –

+0

Merci Aviad, mon obj-c est rouillé. Je mettrai à jour le post avec votre mention. – ryanb