2010-12-05 74 views
0

在客觀C,是什麼這樣做的更好的辦法:測試對象類是否爲零的最佳方法?

if ([response class] == [nil class]) 

響應或者是一個的NSDictionary或的NSMutableDictionary

的代碼工作,但我得到一個"Invalid receiver type 'void *' or "comparison of distinct Objective-C types 'Class' and 'struct NSMutableDictionary *' lacks a cast"警告消息

謝謝

回答

6

如果你真的想測試[response class],而不是response本身的值,你會想要使用

if ([response isKindOfClass:[NSNull class]) 

如果你正在尋找檢查response本身nil,我描述了this answer這樣做是爲了一個類似的問題的一個很好的方式。

+0

事實證明,我需要檢查迴應本身是否爲零。謝謝 – Dave 2010-12-06 04:20:18

3

一個對象的類不能nil除非你已經搞砸了一些運行時間調整。所有有效的對象都必須是有效類的實例。你是否想要做如下的事情?

if (!response) { 
    // 'response' is nil 
} else if ([response isKindOfClass:[NSMutableDictionary class]]) { 
    // response is an NSMutableDictionary 
} else if ([response isKindOfClass:[NSDictionary class]]) { 
    // response is an NSDictionary 
    // (or an NSMutableDictionary if you remove the above 'if') 
} 
+0

`isKindOfClass:`和`isa`是正確的。其餘的都不行;所有字典都是NSCFDictionary(或其他私有類)的實例,它們是NSMutableDictionary的子類。沒有辦法區分可變詞典和不可變詞典(非常有意)。 – bbum 2010-12-05 22:09:25

2

既然你提到無論是在NSDictionary或者的NSMutableDictionary,似乎是爲測試的情況下,那種...

isKindOfClass:將識別接收機是否是指定的類的實例。這包括子類。

請注意,您不能使用它來確定字典是可變的還是不可變的,但字典是NSCFDictionary的實例,它是`NSMutableDictionary的子類。

這是非常有意義的。

+0

有趣。我可以想象在某些情況下成爲PITA。 – 2010-12-05 22:14:31

相關問題