2013-10-19 76 views
5

無法識別選擇好了我的代碼是這樣的:NSNull isEqualToString:在ObjC

我有兩個字符串,place and date.我使用他們這樣的:

cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place]; 

在某些條目,輸出是這個樣子:

"21/10/2012, <null>" 
"21/11/2012, None" 
"21/12/2013, London" 

我的應用程序不會崩潰,但我希望只有當不爲空且不等於無時纔可見。

所以,我想這一點:

NSString * place=[photo objectForKey:@"place"]; 


if ([place isEqualToString:@"None"]) { 
       cell.datePlace.text= [NSString stringWithFormat:@"%@",date]; 
      } else { 
       cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place]; 
      } 

問題是,當地方是<null>我的應用程序崩潰,我得到這個錯誤:

[NSNull isEqualToString:] unrecognized selector send to instance 

所以,我想這:

if (place) { 
      if ([place isEqualToString:@"None"]) { 
       cell.datePlace.text= [NSString stringWithFormat:@"%@",date]; 
      } else { 
       cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place]; 
      } 
     } else { 
      cell.datePlace.text= [NSString stringWithFormat:@"%@",date]; 
     } 

但問題依然存在。

回答

26

我想你的源數據來自JSON或類似的東西(數據正在被解析和丟失的數據被設置爲NSNull)。這是NSNull,你需要處理,目前不是。

基本上:

if (place == nil || [place isEqual:[NSNull null]]) { 
    // handle the place not being available 
} else { 
    // handle the place being available 
} 
+0

是的,它來自JSON。它現在正在工作。我會接受答案! – ghostrider

+4

請注意,'NSNull'是一個單例對象,所以你可以比較'place == [NSNull null]'。 –

+0

很好的答案。我upvoted – user3182143

2

使用[NSNull空]:中

if ([place isKindOfClass:[NSNull class]]) 
{ 
    // What happen if place is null 

} 
3

使用

if (! [place isKindOfClass:[NSNull class]) { 
    ... 
} 

代替

if (place) { 
    ... 
} 

注:NSNull對象不是零,所以if (place)將是真的,那麼。

+1

的'地方= nil'檢查是多餘的。 – 2013-10-19 15:43:54

+0

@ H2CO3是的,你是對的,thx :) – Kjuly