2011-08-08 34 views
1

在我的AppDelegate中,我從JSON提要下載了一些數據。我正在下載幾個頻道的現在/下一個/更晚的時間表。現在,我有三個不同的視圖控制器,其次和以後。在每個視圖控制器中,用戶可以添加/刪除通道,因此當發生這種情況時,必須重新下載新添加的通道數據。Objective-C中的委託和通知

由於數據在AppDelegate中下載並存儲在那裏,我將如何將它傳遞給三個視圖控制器?我應該實施三個獨立的代表嗎?請記住,添加新頻道時,必須重新下載其數據(我現在正在AppDelegate之外進行此操作)。

請幫忙嗎?

感謝

回答

1

這基本上是一個風格問題,你的做法是不是無效的,因爲這樣的。

我會以另一種方式做到這一點 - 雖然AppDelegate不是用作主力,同時有幾個AppDelegates是不可能的。

下面是關於如何可以這樣做的一些想法(儘管它當然不是唯一正確途徑):

  • 首先,我會使用核心數據或一些其他類型的存儲,其可從你的應用程序中的任
  • 那麼也許我會介紹某種「數據控制器」類(也許是單身人士)。這個類應該處理數據的下載以及根據請求將數據分發給視圖控制器。
  • 通過爲此目的設置一箇中央控制器,您可以確保只下載一次數據,因爲控制器確切知道哪些數據已存在。
  • 您的viewcontrollers既不會負責管理下載,也不會自己訪問磁盤上的數據。他們只是向數據控制器發出請求,並在請求的數據可用時得到回調 - 無論它是在磁盤上還是已經下載。
  • 這可以讓您的VC變得苗條而專注,並減少對界面進行更改的痛苦。
+0

我想我會用你的方法。我不需要核心數據,因爲每次啓動時都會刷新一組特定的數據。還有一個問題,我是否應該在單例類中實現數據請求連接和下載,或者只是使用單例類作爲下載數據的存儲?什麼是更好的? – darksky

+0

我會說是的,我也會在數據控制器中實現它。如果沒有更詳細地瞭解您的項目,可能有些理由我不能看到,這會讓我做出其他決定。但無論如何,我不會在管理視圖的控制器上下載管理下載的負擔。如果你喜歡嚴格分開任務,那麼有一個下載控制器陪伴你的數據控制器可能是明智的。但是,這又是一個風格和可維護性的問題。這兩種方法可能同樣適用。 – Toastor

1

Toastor的答案是正確的,正如他所說,有幾種方法可以做到這一點。一種是調用數據訪問類並更改值,或者監聽值的更改。對於以後,Key-Value Observing Programming Guide說以下內容:

KVO是用於在應用模型和 控制器層之間的通信是特別有用的。

  • 控制器對象通常觀察模型 對象的特性,和一個查看對象觀察模型的性質通過控制器對象 。另外,模型對象可能會觀察到其他模型對象(通常用於確定何時從屬值發生變化),甚至可能還會確定何時從屬值發生變化。

另一個是使依賴明確的,也許通過保存在您的應用程序委託一個數據訪問類。請參閱Object-oriented design question, iPhone