Да. Вот как мы это сделали:
В нашем анализаторе xml есть метод, который загружает xml в словарь dict:
-(NSDictionary *)getNodeDictionary:(Node *)node {
if (node->level == 0) return xmlData;
else {
NSDictionary *dict = xmlData;
for(int i=0;i<node->level;i++) {
if ([[dict allKeys] containsObject:SUBNODE_KEY])
dict = [[dict objectForKey:SUBNODE_KEY] objectAtIndex:*(node->branches+i)];
}
return dict;
}
}
И этот метод
-(NSDictionary *)getDataForNode:(Node *)node {
NSDictionary* dict = [[self getNodeDictionary:node] copy];
return dict;
}
В классе RadioData у нас есть переменная экземпляра:
Node *rootNode;
и куча методов
-(Node *)getSubNodesForNode:(Node *)node;
-(Node *)getSubNodeForNode:(Node *)node atBranch:(NSInteger)branch;
-(Node *)getParentNodeForNode:(Node *)node;
-(NSInteger)getSubNodeCountForNode:(Node *)node;
-(NSDictionary *)getDataForNode:(Node *)node;
и собственность
@property (nonatomic) Node *rootNode;
Наконец, в ViewController, когда мы запускаем фрейм, который мы используем:
radioData = data;
curNode = data.rootNode;
и внутри cellForRowAtIndexPath мы имеем:
Node* sub = [radioData getSubNodeForNode:curNode atBranch:indexPath.row];
NSDictionary* dets = [radioData getDataForNode:sub];
и в didSelectRowAtIndexPath:
Node* node = [radioData getSubNodeForNode:curNode atBranch:indexPath.row];
NSDictionary* data = [radioData getDataForNode:node];
Это, вероятно, больше, чем вы хотели, но это общий план.