2009-12-21 26 views
3

我是一位在我的第一個iPhone項目上工作的完全新手。我在.NET開發人員工作了4年,爲您介紹我來自哪裏。我正在嘗試遵循MVC模式,並在我的第一個項目上以正確的方式做事。我不想爲了讓他們工作而把事情拼湊在一起。Objective-C - 將模型對象從控制器傳遞給工作者類

這是我的情況: 我想解析一個只包含1個對象的XML提要。我有一個模型對象,它表示我將從解析XML提要中獲得的對象。我已經分類了NSXMLParser,並且能夠成功解析XML提要並返回值(使用NSLog檢查值)。這是我斷開連接的地方。當從我的控制器移動到子類時,調用XMLParser,填充模型對象並將其返回給控制器的最佳方法是什麼?

我正在尋找某種模式可以遵循,這將被視爲最佳實踐。我不想僅僅把所有的邏輯都放到控制器上的一個方法上,使它無法在任何情況下被重用。

回答

2

如果你讓你的視圖控制器實現NSXMLParserDelegate協議和NSXMLParser實例的委託屬性設爲您的視圖控制器,您的視圖控制器會知道什麼時候解析器parses stufffinishes its work。換句話說,一旦解析器子類告訴委託它完成,視圖控制器可以使用填充的數據模型。

另外,delegation是OS X應用程序(特別是Apple API)大量使用的少數幾種設計模式之一。當你做iPhone開發時,你可能會發現並利用各地的代表。

如果您不想使用代表,另一種選擇是實施觀察者模式,向NSNotificationCenter發出notifications給觀察者,觀察者在他們聽到通知時調用它們的選擇器(方法)。通知優於代表的優點是可以讓很多對象偵聽通知,而只有一個對象通常可以是給定時間的委託。

+0

@Alex Reynolds - 這是非常棒的信息。我想我會嘗試委託路線。我已經看到了一些使用對象初始化類的例子(在本例中爲NSXMLParser),比如創建一個initWithCustomObject方法,並傳入要用來填充視圖的對象。然後,當解析完成時,我會使用該對象來填充視圖上的UI元素。這是最好的辦法嗎? – 2009-12-21 18:50:01

0

你可以創建一個單例類,它將管理你所有的共享動作。你可以找到創造單的快速教程對象here

0

我會把解析操作放在操作隊列中的NSOperation中。然後它可以在後臺線程上執行(請注意,你必須做一些額外的工作才能在NSOperation中執行異步操作)。

當解析全部完成時,將結果存儲在其他控制器可以看到的地方,併發出對象已準備就緒的通知。您也可能想要針對錯誤情況發出通知,以便等待負載完成的控制器知道他們永遠不會獲得對象。

您也可以使用Alex所述的委託,但通知通常更靈活,因爲您可以讓一些不同的對象對負載做出反應。

相關問題