2011-06-02 101 views
1

我試圖實現下面的代碼沒有成功。基本上,我想設置爲使用thisPhoto.userFullName顯示名稱,如果它不是「空白」,否則顯示thisPhoto.userName代替。檢查對象實例的屬性是否爲'空'

UILabel *thisUserNameLabel = (UILabel *)[cell.contentView viewWithTag:kUserNameValueTag]; 

NSLog(@"user full name %@",thisPhoto.userFullName); 
NSLog(@"user name %@",thisPhoto.userName); 
if (thisPhoto.userFullName && ![thisPhoto.userFullName isEqual:[NSNull null]]) 
{ 
    thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userFullName]; 
} 
else if (thisPhoto.userFullName == @"") 
{ 
    thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userName]; 
} 

目前,即使userFullName是空白的,我userName仍沒有顯示在屏幕上。

+1

請記住,如果您在對象中使用'==',它會比較它們的指針。請參閱下面的關於您應該使用的方法的更多細節。 – 2011-06-02 19:59:27

回答

1

我在這裏看到了幾個點

首先 - 如果你userFullName實例變量NSString*然後做簡單的比較與nil是不夠的:

if (thisPhoto.userFullName) 

當然,除非你明確地將其設置爲[NSNull null],然後要求你寫的條件。

二 - 比較字符串與isEqualToString:方法,因此第二個條件做了應該改寫爲:

if ([thisPhoto.userFullName isEqualToString:@""]) { 
    ... 
} 

三 - 有邏輯缺陷 - 如果你的userFullName等於空字符串(@"")的代碼仍落入到第一個分支。即空字符串(@"")不等於[NSNull null]或簡單零。因此你應該寫分支 - 一個處理空字符串和零,另一個處理正常值。所以,帶着幾分重構你的代碼變成這樣:

thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userFullName]; 
if (!thisPhoto.userFullName || [thisPhoto.userFullName isEqualToString:@""]) { 
    // do the empty string dance in case of empty userFullName. 
} 
2

如果像我想,thisPhoto.userFullNameNSString您可以嘗試

[thisPhoto.userFullName isEqualToString:@""] 
5

我寧願

if([thisPhoto.userFullName length]) 
+0

我知道「零意味着虛假」和「非零意味着真實」,但這種類型的代碼讓我尖叫,因爲它使意圖不明確。當作者以外的人看到他們會說:「作者是否忘記將該值與另一個整數進行比較?」。在這種情況下,省略比較的右側是恕我直言的醜陋代碼。 – octy 2011-06-03 13:07:05

3

使用-length。只要字符串是nil或空字符串@"",它將爲0。你一般都想同時對待這兩種情況。

NSString *fullName = [thisPhoto userFullName]; 
thisUserNameLabel.text = [fullName length]? fullName : [thisPhoto userName]; 
1
// this assumes userFullName and userName are strings and that userName is not nil 
thisUserNameLabel.text = [thisPhoto.userFullName length] > 0 ? thisPhoto.userFullName : thisPhoto.userName; 
2

其他兩個答案是正確的,打我給它。而不是重複他們所說的話 - 我會指出其他的東西。

[NSNull null]用於存儲在集合類(NSArrayNSSetNSDictionary)不允許被存儲在其中nilnil值。

所以,除非你檢查,你從一個集合中獲取值 - 沒有點檢查,對[NSNull null]

1

「空白」意味着@"",也@" "@"\n"。所以我會修剪userFullName並檢查該字符串的長度。

if ([[thisPhoto.userFullName stringByTrimmingCharactersInSet: 
     [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) { 

    // it's blank! 
}