2011-06-16 130 views
0

我在控制器對象中有一堆插座需要傳遞另一個控制器。如果它只有2或3個值,我只是將它們作爲參數傳遞給委託方法(不是直接插入網點,而是通過將值複製到變量)將數據傳遞給委託

但是,這裏有不少。處理這個問題的最好方法是什麼?我看到三種方法:

  • 我可以創建一個新的對象來保存所有這些屬性並通過它。

  • 我可以在代理方法[self.delegate didClickDone:self]中傳遞控制器。這種方法的問題是:我是否允許從外部訪問另一個控制器的網點?

  • 我可以按照第二個選項,但將每個插座的值複製到一個屬性,並允許其他控制器通過訪問器方法訪問它們。

解決此問題的最佳方法是什麼?

回答

1

你總是被允許做你自己允許的。但是,有些方法可能會阻止Apple接受Appstore的App。這不是這裏的情況;)

如果有多個值傳遞我會去

  • 陣列如果包含傳遞的對象是同一類型/類型的
  • 使用一個數據類別如果這些值本質上是異構的。像M.Fowler的Refactoring - >介紹參數對象(第295頁)。

正如您所建議的那樣,骯髒的方法是將視圖控制器本身的其他實例打開出口。防止其他類的多孔行爲。

+0

那麼,對象基本上是混合的。它們只是控制器擁有的窗口中的數據。有些是字符串,一些數字和一些BOOL。我猜我應該創建一個名爲「Parameters」的新對象並將其傳遞給委託方法? 將參數對象傳遞給程序的模型也是明智的嗎?因爲這是其他控制器中的委託方法最終會做的事情。 – saad 2011-06-16 15:36:54

+0

@Saad Abbasi我甚至會去:更新模型,然後不要將數據作爲對象或數組傳遞,並讓其他實例訪問模型!由於模型應該保持當前狀態。 – 2011-06-16 15:41:15

+0

嘗試理解你在這裏所說的內容:而不是傳遞'parameter',我應該在控制器中擁有一個指向程序模型的屬性。一旦控制器從窗口獲得值,它應該直接通知模型,而不是通過其他控制器?我覺得我完全偏離了這裏,並不理解你的意思。準確地說,我有兩個控制器:'SheetController'和'AppController'。前者的目的是處理表單並將數據返回給調用表單的人員,我通過代表執行此操作。 – saad 2011-06-16 15:53:38