2009-08-08 5 views
0

IBActionログインが呼び出されると、SOAP Webサービスからの応答をtrueまたはfalseのいずれかで使用することになっています。falseは、ユーザーにアプリケーションの使用を許可されていないことを意味します。 私は応答を得た後、これらのif文を使用していますが、なんらかの理由でtrueとfalse ifsの両方を実行します。iPhoneで、View Controller .mファイルの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; 
     } 





} 

if文の中で唯一の等号が

答えて

2

あります助けてください。これは文字列をsoapResults変数に代入し、if文が文字列を評価するようにします(これは常に真となります)。

if (@"true") 

代わりに、2つの等号を使用して比較します。

if (soapResults == @"true") 

この共通の問題は、変数を常に比較の最後に置くことで回避できます。

if (@"true" == soapResults) 

このように、2番目の等号を忘れた場合、コンパイルエラーが発生しやすくなります。コメント者が親切に指摘したように、==演算子を使ってObjective-C文字列を比較しないでください。代わりにisEqualToStringメソッドを使用します。

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

[soapResults isEqualTo:@ "true"]おそらく? –

+1

いいね!とにかく、比較に関して:より良い[soapResults isEqualToString:@ "true"]を使用すると、常にfalseになります(等号はObj-Cの文字列を比較するのには良い方法ではありません)。 –

+0

ありがとう、私のobj-cは錆びています。あなたの言葉で投稿を更新します。 – ryanb

関連する問題