对NSXmlParser使用不同的代表

对NSXmlParser使用不同的代表

问题描述:

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

例如:

我要求一个web服务人员列表。结果列表是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" 

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

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

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

+0

好吧,所以也许我只是在想它。 :-) – 2010-02-01 21:55:09

+0

另外 - 但我需要处理的情况下,当我没有这样的约会。没有以前的任命为特定的人,我将我只打电话PersonResultDelegate与零..但后来我不知道哪个是哪个。我想在最初传入的回调中添加一些id是要走的路。 – 2010-02-01 21:56:46