簡體   English   中英

在導航到ViewController之前為它加載數據的最佳方法是什么?

[英]What's the best way to load data for a ViewController before navigating to it?

在我的應用程序中,有兩個視圖控制器可導航到DetailsViewController。

現在,當DetailsViewController出現時,我從服務器獲取數據並將其顯示在UI上。 我不喜歡這樣做,因為在進行網絡請求時用戶界面為空白。 我想要的是將數據加載到以前的視圖控制器中,然后傳遞給DetailsViewController。

現在的問題是,我在兩個視圖控制器中具有完全相同的“加載數據然后推送”代碼,而且我不確定刪除重復的最明智的方法是什么。

一種想法是讓兩個視圖控制器從包含加載/推動方法的公共超類繼承。 我不喜歡這種策略,因為假設我有更多像DetailsViewController這樣的ViewController,我不想為每個類編寫一個加載超類。

另一個想法是在DetailsViewController中定義一個靜態方法,兩個視圖控制器可以調用該方法,但是此方法包含與UI相關的代碼(特別是在網絡獲取失敗的情況下顯示HUD Progressbar和UIAlertView的代碼),這讓我感到不舒服。

我是iOS和Objective-C的新手,所以我可能缺少一些簡單明顯的東西。

在這種情況下,我最喜歡的是創建一個新類來處理數據的加載(例如http-request等),並為此類創建一個委托協議。 然后,可以在您的兩個viewControllers中實現此委托回調,然后在調用它們時對您的DetailsViewController進行推送選擇。 委托是一個非常好的功能,請在此處查看文檔: 委托

好吧,我最好在評論中寫出來,但是我對此沒有聲譽。

假設您正在讀取帶有多個學生信息(名稱,年份等)的json,則可以創建一個具有將被讀取的屬性的學生對象,以及一個對象,該對象的方法將在后台運行,從而負責訪問您的WS(JSON或其他形式)並將此信息記錄到Student對象。 因此,如果您有10個學生,則將有一個包含10個學生的NSArray。 該數組是您將要用於下一個ViewController的數組。

這是很多代碼,但是您容易想到示例。

如果使用情節提要,則可以使用prepareForSegue: sender:將數據/模型類傳遞給DetailsViewController。 如果使用xib,則可以在實例化DetailsViewController之后並在推送之前執行相同的操作。

如果需要從服務器加載后續數據,則應編寫一個為您完成此網絡工作的類。

如果DetailsViewController需要加載一些其他數據,則可以使用類似Andy建議的加載視圖之類的內容。 這是一種廣泛使用的方法。

暫無
暫無

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

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