2013-06-27 68 views
0

遵循各種Objective-C編程指南中強調的MVC模式,當我使用帶有控制器的模型時,我應該將控制器設置爲給定模型的delegate。現在我有一個巨大的數據對象,創建起來非常昂貴,並且有幾個控制器需要使用這個數據對象。只要delegate屬性設置爲正確的控制器,Data對象對於該控制器就會正常工作。有沒有辦法在這些控制器之間共享這個模型?如何在一組代表中共享數據對象?

我已經頭腦風暴了一段時間,但沒有想到任何特別好的解決方案。我已經拿出

  1. 使用通知中心有幾件事情(但它似乎昂貴的設立只是爲這個特定的情況下,這樣的關係)
  2. 使數據對象的每個方法採取delegate參數:這是我目前使用的現在,但它是笨重且達到極限

編輯

感謝誰已經使用一個NSArray建議我的人。我想我忘了包括這個subtlty:

對於我的情況說,其中一個代表A,想要通過使用其特定方法之一查詢數據對象。如果Data對象的delegate字段設置爲A,結果將是正確的。但根據我的理解,使用數組並在每個委託上調用方法不會給我我想要的答案。

事實上,因爲我的數據對象無法知道哪個委託調用它,即使它知道一切應該與

任何思想相關聯的代表不能給予回覆正確的結果在這?

回答

0

我最終做的是設置另一個級別的間接 - 每個控制器將與一個「中間件」對象進行通信,該對象又與數據對象進行通信。通過這種方式,通用的委託 - 委託方法被保留,而數據對象只需要被創建一次 - 以每個控制器添加'中間人'對象爲代價。

在我的示例中,「中間件」對象將設置一個Controller作爲其委託屬性,當該控制器想知道有關Data對象的信息時,「中間件」對象將使用其委託屬性來查詢信息來自Data對象。

0

您可以使用委託製作NSArray,然後在數組中的每個委託上調用該方法。 (注意保留週期)。

0

如果你不想使用通知,你可以嘗試使用多播委託方法。在這裏,你會保留一個代表NSMutableArray而不是一個。因此,不要設置委託,而要從委託數組中添加和刪除委託。當調用委託時,您可以在數組中的每個委託上調用該委託方法,檢查每個委託是否響應該特定回調。 如果您願意,您也可以控制代表被調用的順序,因爲您自己創建並管理委託數組。