2011-04-15 18 views
0

我注意到,使用iPhone編程時,您需要從ViewController中檢索數據,因爲數據被檢索到。我應該在我的視圖控制器中使用我所有的Web服務代碼

例如:ViewDidLoad被調用。您開始檢索數據,然後在完成後,郵件會發送到您的viewcontroller,例如requestFinished,這是你配置/刷新你的用戶界面的地方。

我用這種方法的問題是我有一堆web服務代碼和XML構建和解析所有在我的視圖控制器。

有誰知道這是否是正確的方法或是否有更好的方法來做到這一點。

在.NET中我會專門從Web服務中檢索數據的類,我只需調用Web服務來獲取數據,並且可以在我的應用程序的各個位置使用相同的Web服務。

回答

0

不,這絕對不是正確的做法。關鍵在於MVC範例 - 模型,視圖,控制器 - 您的數據類完全適合作爲M =模型,因此將所有數據處理代碼放入專用模型類中。

因爲url處理有希望是異步的,所以當發生各種事件時,你的模型仍然需要通知你的視圖控制器。你在這裏有幾個選擇,但最合適的可能是使用委託模式,這樣當模型有數據需要顯示時,基本上可以啓動回調視圖控制器。

(另一種方法是應該使用不太緊密的通知,並且在這種情況下完全可行,但代表會更合適)。

+0

感謝您 - 我對MVC有完全錯誤的理解。我正在閱讀Apple的指南。 Model對象是否檢索數據並充當「域」對象?例如,對象Car將擁有Color屬性,並且將負責從Web服務中檢索其描述以及在視圖控制器中用於將Car.Description連接到插座描述? – TheLearner 2011-04-15 08:58:49

1

沒有理由在Objective-C/Cocoa中做到這一點。您應該創建一個處理Web服務的類,並在數據可用時通知視圖控制器。

0

那麼你可以創建一個解析器來解析你的XML在一個seprate類中,甚至你的http請求可以在一個seprate類中。 在視圖控制器中不需要做任何事情。

如果您正在使用線程,請務必創建委派或使用通知中心。如果視圖控制器被卸載,請將請求上的委託或解析爲無。

相關問題