2012-11-23 57 views
0

我有一個包含用於進行Web調用的字典的類。基本上,鍵值對用於創建將在網絡調用需要任何值時發佈到URL的數據。這個對象類是使用JSON設置的。NULL字典未計爲NULL

我有一個方法,它需要這個類的對象,並使用它來設置網絡調用。我的問題是,如果沒有參數是必需的,那麼字典設置爲null這是很好,這是我想要的,但由於某種原因,當我做一個if語句來檢查字典是否爲空,它是擊中else聲明它不是null。方法是這樣的

-(void)webCall :(WebServiceCall *)webCall_p 
{ 

    //Creates a dictionary from the one stored in the WebResponse Class 
    NSMutableDictionary *dict = [[webCall_p getWebServiceResponse] getVariablesByRegexMap]; 

    NSLog(@"%@", dict); 
} 

當我把它打印出來,我得到這個

<null> 

然而,如果我把一個if語句來檢查它是否是空像這樣

if(dict == NULL) 
    { 
     NSLog(@"NULL"); 
    } 
    else 
    { 
     NSLog(@"Not NULL"); 
    } 

它說不是空。如果我嘗試使用字典計數命令,像這樣

NSLog(@"%i", [dict count]); 

的應用程序崩潰,並提出了這個錯誤

- [NSNull計數]:無法識別的選擇發送到實例0xaf8678 2012年11月23日11:48:44.005測試[3403:14003] * 終止應用程序由於未捕獲的異常 'NSInvalidArgumentException' 的,原因是: ' - [NSNull計數]:無法識別 選擇發送到實例0xaf8678'

我不能爲我的生活弄清楚這一點。任何幫助將不勝感激

回答

1

Aparently值IST NSNull,它是一個對象,而不是零。 NSNull是一個單身人士if (dict == NSNull)應該工作。

+0

這一個偉大的工程,歡呼聲。我不明白的是爲什麼會發生這種情況,對於我班上的其他字典,通常的字典== nil方法工作正常,或[字典計數]有效,我不確定爲什麼這個特別的調用計數崩潰的應用程序 – AdamM

+1

我不知道這個案件的細節,但我可以嘗試解釋一般。在某些情況下,對象不能爲零。對於這些情況,引入了「空」單例對象NSNull。它從NSObject繼承,因此完成了適當對象必須做的所有事情。但它代表着「無」的價值。如果有疑問,您需要返回相關文檔或者直接試用。大多數時候你會處理零/空,但有時NSNull來得心應手。 –

+0

我的情況有點複雜,我使用JSON創建了一個相當大的框架,之前我沒有遇到過這個問題,所以我不確定我做了什麼不同。我將不得不對我的框架中的其他一些類進行進一步測試,以查看是否發生了相同的事情。至少我將知道如果我再次遇到此錯誤需要注意什麼,再次感謝您的信息! – AdamM

0

您需要使用nil而不是NULL。

if (dict == nil) 

...

+0

我已經試過零很好,應該已經包括在我的問題,同樣的事情發生 – AdamM

0

首先,如果你想檢查是否存在 - 然後檢查nil,不NULL

if (dict) { // or (dict == nil) 
    // do something 
} 

其次,使用正確的格式爲NSLog%d代替%i

+0

我嘗試了這兩種方法,他們沒有爲這個工作 – AdamM

1

使用此

if ([dict isKindOfClass:[NSNull class]]){ 

} 
+0

這一個也工作,歡呼 – AdamM