当委托不是自我时,nsxmlparser的OO模型

时间:2010-06-06 05:51:14

标签: objective-c delegates nsxmlparser

我正在努力为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方式。我确信我可以用各种讨厌的类方法来做到这一点。

这个问题有意义吗? 感谢。

1 个答案:

答案 0 :(得分:0)

这个问题确实有意义(分裂也是如此)。如果我理解正确,你可以简单地将结果数组属性添加到详细解析器委托,并在调用[xp parse]后从调用者中读取此属性?