こんにちは、NSXMLParserを使用していくつかのxmlデータを解析しています。このデータを使用してツリー表現を構築し、ドリルダウンテーブルの階層を作成しています。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"exercises"]) {
//init tree
appDelegate.Tree = [NSMutableDictionary new];
appDelegate.Rows = [NSMutableArray new];
[appDelegate.Tree setObject:appDelegate.Rows forKey:@"Rows"];
...
これで、xmlの要素menuitemが読み取られている場合、初期化され、theChildrenがmenu_itemディクショナリに追加されます。
if([elementName isEqualToString:@"menuitem"]) {
appDelegate.theChildren = [NSMutableArray new];
[appDelegate.menu_item setObject:appDelegate.theChildren forKey:@"Children"];
これはすべて計画通りに進んでいます。
しかし、以下は私が望むようには進んでいません。別のタグ(workout_mob)が表示されたら、theChildrenを埋めてほしいのですが、これは一番下の辞書アイテムでのみ発生します。
http://img188.imageshack.us/img188/7052/picture4efx.png
if([elementName isEqualToString:@"workout_mob"]) {
appDelegate.work_out_mob = [NSMutableDictionary new];
[appDelegate.theChildren addObject:appDelegate.work_out_mob];
少なくとも私の両方のアイテムを埋めていない理由について誰かが手がかりを持っていますか?つまり、両方にChildren配列を追加しているので、残りのアイテムの一番下の配列だけを追加しているのです。次のように、xmlコードに別のxmllineを追加すると、次のようになります。
<menu_mob>
<menuitem id="1" text="Press this for exercises" pic="workout" />
<menuitem id="2" text="VirtuaGym online" pic="online" />
*<menuitem id="3" text="the Added Line" pic="online" />*
</menu_mob>
次に、すべての子アイテムを一番下のメニューアイテムに追加します(別の辞書アイテム(3)を想像してください)。なぜ ?