2013-08-27 85 views
4

嗨,我有麻煩使用多個if語句。這裏是我的代碼:我有一個2 if語句,第一個被跳過,爲什麼?

if ([itemOnSpecial caseInsensitiveCompare: @"yes"] == NSOrderedSame) { 
    UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
    specialLabel.text = specialPrice; 
    [specialLabel setHidden:NO]; 
    } 
//This statement is completely skipped 

if ([isOnBulkSpecial caseInsensitiveCompare:@"yes"] == NSOrderedSame) { 
      UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
      specialLabel.text = bulkSpecialPrice; 
      [specialLabel setHidden:NO]; 

}else{ 
    UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
    [specialLabel setHidden:YES]; 
} 

只考慮第二條if語句。第一條if語句似乎完全被忽視。

+0

也許你只會認爲第一個if語句被跳過,因爲你重寫了specialLabel.text中的值,如果第二個? –

+0

嘗試將其他部分放入第一個塊中。 – keen

+0

我如何不重寫第二個中的specialLabel.text的值? – Shayno

回答

3

,如果你的代碼更改爲:

if ([itemOnSpecial caseInsensitiveCompare: @"yes"] == NSOrderedSame) { 
    UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
    specialLabel.text = specialPrice; 
    [specialLabel setHidden:NO]; 
    } 
else 
{ 


    if ([isOnBulkSpecial caseInsensitiveCompare:@"yes"] == NSOrderedSame) { 
     UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
      specialLabel.text = bulkSpecialPrice; 
      [specialLabel setHidden:NO]; 

    }else{ 
     UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
     [specialLabel setHidden:YES]; 
    } 
} 

那麼第二個if語句將被稱爲只有在第一次沒通過。這樣specialLabel.text屬性將不會被更改兩次,並且該值不會在第二次被覆蓋,如果

+0

謝謝我在你的幫助下工作。 – Shayno

+0

@Shayno任何時候 –

0

第一條語句將檢查區分大小寫的字符串,而第二條語句將檢查不區分大小寫的字符串。

當你的itemOnSpecial's值等於只有@「是」時,它會進入裏面,否則它會跳過,而在第二種情況下你的字符串等於@「是」,@「是」,@ 「yEs」,@「yeS」在所有情況下都會進入。

所以,我希望你明白我的答案...

+0

我剛剛更新了我的問題,以便兩個語句都是caseInsensitiveCompare。這是我原本打算這樣做的。我將其更改爲isEqualToString以查看代碼是否可以像那樣工作,但它沒有。這兩種方式都不起作用... – Shayno

2

嘗試這樣的代碼:

if ([itemOnSpecial isEqualToString: @"yes"] == NSOrderedSame) { 
    UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
    specialLabel.text = specialPrice; 
    [specialLabel setHidden:NO]; 

if ([isOnBulkSpecial caseInsensitiveCompare:@"yes"] == NSOrderedSame) { 
      UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
      specialLabel.text = bulkSpecialPrice; 
      [specialLabel setHidden:NO]; 

}else{ 
    UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
    [specialLabel setHidden:YES]; 
} 
} 

或者這樣:

if ([itemOnSpecial isEqualToString: @"yes"] == NSOrderedSame) { 
     UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
     specialLabel.text = specialPrice; 
     [specialLabel setHidden:NO]; 
     } else if ([isOnBulkSpecial caseInsensitiveCompare:@"yes"] == NSOrderedSame) { 
       UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
       specialLabel.text = bulkSpecialPrice; 
       [specialLabel setHidden:NO]; 

    }else{ 
     UILabel *specialLabel = (UILabel*) [cell viewWithTag:5]; 
     [specialLabel setHidden:YES]; 
    } 

我不明白你的腳本,但是第一條if語句與代碼中的第二條語句無關。

+0

如果我用「else if」代碼嘗試啓動第二個代碼,那麼specialLabel.text將顯示specialPrice而不是bulkSpecialPrice。 – Shayno

+0

你能解釋一下你的腳本嗎?你想要這些陳述呢? – Rawrrr1337

0

在第一個if條件中設置斷點並打印條件以查看它返回的內容。然後結束代碼。

ex。

(lldb) p ([itemOnSpecial caseInsensitiveCompare: @"yes"] == 0) 
(bool) $1 = true 

凡NSOrderedSame == 0,