2012-03-06 49 views
2

我已經得到了這個XML文件,我正在使用解析器here進行解析,我遇到了一個問題。如果XML中只有一個項目具有相同的結構,那麼解析器將接受XML並創建一個字典,如果有多個XML項目,則解析器將創建一個詞典數組。例如:在Objective-C中測試類的類型

<root> 
    <item> 
    <attr1>Hello</attr1> 
    <attr2>world!</attr2> 
    </item> 

會創建一個字典。但是:

<root> 
    <item> 
    <attr1>Hello</attr1> 
    <attr2>world!</attr2> 
    </item> 
    <item> 
    <attr1>Hello</attr1> 
    <attr2>world!</attr2> 
    </item> 

會創建一個字典數組。

現在,我將如何區分檢索到的數據是NSDictionary還是NSArray?我該如何設置解析器的結果?例如,現在我正在這樣做:

id eventsArray = [[[[XMLReader dictionaryForXMLData:responseData error:&parseError] objectForKey:@"root"] objectForKey:@"events"] objectForKey:@"event"]; 
if([eventsArray isMemberOfClass:[NSDictionary class]]) { 
    //there's only one item in the XML 
} else { 
    //there's more than one item in the XML 
} 

但這不起作用。那麼,我將如何檢查eventsArray是什麼類型的對象?

謝謝!

+1

'isMemberOfClass'檢查,如果事情是*正是*該類。你需要'isKindOfClass',特別是對於像'NSDictionary'這樣的「類集羣」。 'NSDictionary'類實際上並沒有被使用,而是有一個(非常長的)子類列表,這些子類沒有記錄,並且可以任意改變。你永遠不會知道你會得到哪個子類,並且當你使用它的時候,一個對象在理論上甚至可以從一個類改變到另一個類。 – 2012-03-07 00:04:07

回答

3

試試這個鏈接:

if([eventsArray isKindOfClass:[NSDictionary class]]) { 
    //there's only one item in the XML 
} else { 
    //there's more than one item in the XML 
} 

希望這有助於。

0

我會怎麼做:

if ([eventsArray isKindOfClass:[NSArray class]]) 
//// 
else if ([eventsArray isKindOfClass:[NSDictionary class]]) 
//// 
else 
////