2012-03-06 8 views
2

パーサーhereを使用して解析しているこのXMLファイルがあり、問題が発生しています。パーサーは、同じ構造を持つXML内に1つの項目のみがある場合は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'クラスは実際には使用されません。代わりに、文書化されておらず、任意に変更できるサブクラスのリスト(非常に長い)があります。あなたは実際にどのサブクラスを取得するのかは決して分かりません。オブジェクトを使用している間に、理論的にはあるクラスから別のクラスにオブジェクトを変更することもできます。 –

答えて

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 
//// 
関連する問題