簡體   English   中英

Objective-C - 從控制器將模型對象傳遞給工作者類

[英]Objective-C - Passing Model Objects to a Worker Class From a Controller

我是第一個完成iPhone項目的新手。 我已經成為一名.NET開發人員已有4年時間,可以為您提供有關我來自哪里的背景知識。 我試圖遵循MVC模式,並在我的第一個項目上以正確的方式做事。 我不想為了讓他們工作而一起破解。

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

我正在尋找一種可以被認為是最佳實踐的模式。 我不想將所有邏輯都拋到控制器上的方法中,使其無法在任何情況下重用。

如果使視圖控制器實現NSXMLParserDelegate協議,並將NSXMLParser實例的委托屬性設置為視圖控制器,則視圖控制器將知道解析器何時解析內容完成其工作 換句話說,一旦解析器子類告訴委托它完成,視圖控制器就可以使用填充的數據模型。

另外, 委托是OS X應用程序(特別是Apple API)大量使用的一些設計模式之一。 在進行iPhone開發時,您可能會在任何地方找到並使用代理。

如果您不想使用委托,則另一個選項是實現觀察者模式,從NSNotificationCenter向觀察者發出通知 ,觀察者在聽到通知時調用其選擇器(方法)。 通知超過委托的優點是您可以讓許多對象偵聽通知,而在給定時間只有一個對象通常可以是委托。

您可以創建一個單例類,它將管理您的所有共享操作。 您可以在此處找到創建單例對象的快速教程

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

解析完成后,將結果存儲在其他控制器可以看到的位置,並發出對象已准備好的通知。 您可能還希望發出錯誤條件通知,以便等待加載完成的控制器知道它們永遠不會獲得對象。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM