2010-02-01 13 views
0

我想弄清楚設計一些東西的最佳方法。我正在編寫一個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" 

這樣,當委託被調用我知道正在傳遞什麼樣的約會。

回答

0

「每個Appointment對象都會導致對已註冊的AppointmentResultDelegate的調用,但我怎麼知道哪個是第一個,哪個是最後一個?」

通過查看您接收這些回調的順序。或者通過查看該XML數據中的某個值。就像一個序列或數據。我當然不知道你的數據。

+0

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

+0

另外 - 但我需要處理的情況下,當我沒有這樣的約會。沒有以前的任命爲特定的人,我將我只打電話PersonResultDelegate與零..但後來我不知道哪個是哪個。我想在最初傳入的回調中添加一些id是要走的路。 – 2010-02-01 21:56:46