2012-12-05 38 views
2

我米拍攝的NSMutableDictionary對象中的NSString這樣的:xcode中的NSString或NSCFString?

NSString *state=[d valueForKey:@"State"]; 

現在有時狀態可以爲空,有時填充有text.So林比較it.While比較狀態有時和NSCFString othertimes..So無法變得NSString的得到想要的結果..

if([state [email protected]""]) 
{ 
//do something 
} 
else 
{ 
//do something 
} 

所以,當比較它有時返回零。所以立即跳進else塊。

我需要一個標準的方式來比較,如果狀態是空的它是否是一個的NSString或NSCFString ...

我該怎麼辦呢?

回答

-1

您必須鍵入它才能得到正確的答案。

NSString *state = (NSString *) [d valueForKey:@"State"]; 

    if(state != nil) 
    { 
     if(state.length > 0) 
     { 
      //string contains characters 
     } 
    } 
+5

不,你不必強制轉換。在C和Objective-C中,從指針類型到另一個指針類型的類型轉換隻會關閉編譯器,它在運行時不會執行任何操作。 – zneak

+0

k如果typecasted如何比較?if(state == nil)?or something elz? – Sindhia

+0

你想要這個 – junaidsidhu

2

如果無法得到你想要的結果,我可以向你保證,這不是因爲你得到了NSCFString而不是NSString

在Objective-C中,框架是用羣集類填充的;也就是說,您在文檔中看到了一個類,實際上,它只是一個接口。該框架改爲使用它們自己的這些類的實現。例如,如您所述,NSString類通常由NSCFString類代替;還有其他幾個,如NSConstantStringNSPathStore2,實際上是NSString的子類,並且其行爲將與您預期的相同。

你的問題,從我所看到的...

現在有時狀態可能爲空,有時充滿了文字。

......在Objective-C中,調用方法nil是合法的。 (Nil是其他語言(如C#和Java)中的null的Objective-C概念。)但是,當您這樣做時,返回值始終歸零;所以如果字符串是nil,則與方法進行的任何相等比較將返回NO,即使您與nil進行比較。即使如此,請注意,空字符串nil不同,因爲nil可被視爲缺少任何內容。一個空字符串沒有字符,但是,嘿,至少它在那裏。 nil意味着什麼都沒有。

所以,而是採用了比較state爲空字符串的方法,你可能需要檢查statenil,使用簡單的指針平等。

if(state == nil) 
{ 
    //do something 
} 
else 
{ 
    //do something 
} 
+0

那麼我該怎麼做以及如何比較? – Sindhia

+0

@Sindhia,當你評論時,我正在編輯我的答案,你現在應該有你的答案。 – zneak

+0

正如你所說,如果我將它與if(state == nil)進行比較,事件狀態不包含任何文本,它將跳轉到else block.and當我看到控制檯描述狀態說明時...打印狀態描述。這就是它,沒有空或沒有什麼......該怎麼辦? – Sindhia

1

你可以做到這一點

if([state isEqualToString:@""]) 
{ 
//do something 
} 
else 
{ 
//do something 
} 
+1

我沒有得到它的工作eventhough文本是空的..廣告可能我知道這是什麼:isKindOfClass:[NSNull類]]? – Sindhia

+0

你可以請NSLog對於你的狀態 – Rajneesh071

+0

有時我得到null,有時什麼都沒有NSLog沒有打印時,它是空的 – Sindhia

相關問題