我正在努力为nsxmlparser的代表设计正确的设计。
为了构建我的Foos表,我需要进行两种类型的webservice调用;一个用于整个表,一个用于每一行。它本质上是一个主查询然后是详细查询,除了master-query-result-xml没有返回足够的信息,因此我需要查询每一行的详细信息。我没有处理大量数据。
无论如何 - 之前我刚刚使用过
NSXMLParser *parser = [[NSXMLParser alloc]init];
[parser setDelegate:self];
[parser parse];
并在我所在的任何班级中实施所有适当的委托方法 为了清洁,我现在创建了两个单独的委托类,并完成了类似的事情:
NSXMLParser *xp = [[NSXMLParser alloc]init];
MyMasterXMLParserDelegate *masterParserDelegate = [[MyMasterXMLParser]alloc]init];
[xp setDelegate:masterParserDelegate];
[xp parse];
除了更清洁(至少在我看来)之外,它还意味着每个-parser:didStartElement
实现都不会花费大部分时间来确定他们正在解析哪个xml。
所以现在是问题的真正症结所在。
在我分割出委托之前,我在主类中也实现了委托方法,这是一个类级NSMutableArray,我只需要在-parser:didEndElement
找到我的对象时创建的from-xml每条记录的“结束”。
现在委托是在单独的类中,我无法弄清楚如何在'detail'委托类中使用-parser:didEndElement将创建的对象“返回”到调用类。至少,不是干净的OO方式。我确信我可以用各种讨厌的类方法来做到这一点。
这个问题有意义吗? 感谢。
答案 0 :(得分:0)
这个问题确实有意义(分裂也是如此)。如果我理解正确,你可以简单地将结果数组属性添加到详细解析器委托,并在调用[xp parse]
后从调用者中读取此属性?