为NSXmlParser使用不同的委托

时间:2010-02-01 21:35:04

标签: iphone oop delegates nsxmlparser

我想弄清楚设计一些东西的最佳方法。我正在编写一个iPhone应用程序,并且大多数情况下我使用的是对Web服务的异步调用。这意味着我可以设置URLConnection,调用start并在数据可用或发生异常时让它回叫。这很好用,我认为这是处理事情的正确方法。

例如:

我从网络服务请求人员列表。结果列表是Xml Person元素,它将由我的XmlDelegate转换为objective-c“Person”对象。

当我调用该函数来获取该人时,我传入一个“PersonResultDelegate”,这是一个名为“PersonReceived:(Person *)p”的函数的协议。所以,每次我得到一个完整的Person对象时,我都会调用该方法,一切都很好。因此,我的详细信息视图(或搜索结果视图)只接收可用的元素。

当我需要获得多个特定对象时,问题就出现了。在我的具体案例中,我需要获得一个人的第一次和最后一次约会。所以,我需要进行两次API调用才能获得这两个单独的Appointment对象。每个Appointment对象将导致对已注册的AppointmentResultDelegate的调用,但我怎么知道哪个是第一个,哪个是最后一个?当没有“第一次”或“最后”约会时,我还需要以某种方式处理这种情况,并且代理将永远不会被调用。

设计明智的方法是什么?我应该将一些额外的上下文信息添加到初始请求中,并将其传递回委托中的句柄吗?一段不透明的数据,只对初次通话的人有意义?我有什么其他选择?

解决方案

我实际上最终做的只是将一条不透明的数据与约会一起传递给代表。所以,当我请求约会对象时,我有一个方法,如:

getNextAppointment withDelegate:self withContext:@"next"
getPrevAppointment withDelegate:self withContext:@"prev"

这样当委托被调用时,我知道正在传递什么约会。

1 个答案:

答案 0 :(得分:0)

“每个Appointment对象将导致对已注册的AppointmentResultDelegate的调用,但我怎么知道哪个是第一个,哪个是最后一个?”

查看接收这些回调的顺序。或者通过查看xml数据中的某些值。像序列或数据。我当然不知道你的数据。