2013-07-31 14 views
0

所以,在我的應用我有以下情況:Obj-C中的委託模式 - 我做錯了嗎?

BackendCommunicatingClass - >(母公司) - > ModelClass - >(母公司) - > HomescreenViewController

  • HomescreenViewController是ModelClass委託。
  • ModelClass是BackendCommunicatingClass的代表。

此外,當應用程序首次啓動時,我有這樣的:

WelcomeViewController - >(母公司) - > HomescreenViewController

  • HomescreenViewController是委派WelcomeViewController。

當用戶鍵入的WelcomeViewController用戶名和密碼,這些信息需要得到一路BackendCommunicatingClass,然後一路回到WelcomeViewController如果需要顯示錯誤。現在我已經通過向通信鏈中的每個類傳遞信息來實現這一點,直到它到達BackendCommunicatingClass。結果是很多協議方法的重複,我覺得我做錯了。

您認爲如何?

+0

一個有效的選擇可能是使用主視圖控制器發送的通知。或在後端控制器上設置KVO。 – Leonardo

+0

什麼是KVO?我仍然不明白通知是做什麼的。 –

+0

KVO是關鍵價值觀察。請參閱Apple的文檔。通知是向所有對某事感興趣的人宣佈某種事物的一種方式;它可以用作事件模式或兩個對象,否則這兩個對象之間沒有彼此連接來傳送數據。 – Jesper

回答

1

那麼我明白這不是最清晰的解決方案,但沒有代碼和你的程序的目的,這是我的建議。

  • 在後端視圖控制器中實現Key Value Observing(KVO),觀察Home View Controller中的更改。只要後端控制器檢測到文本字段中的更改,通過主視圖控制器中的專用變量,就會觸發它必須執行的所有操作。
  • 當後端完成時,它會發送一個NSNotification和操作結果。主視圖控制器,您已經聽取了這種自定義通知,對此作出反應並顯示錯誤消息或其他人員。

聽起來很複雜,但KVO和通知很容易實現,並且網上有很多文檔和教程。

+0

聽起來就像我在找什麼。謝謝! –

0

如果這些委託協議提供的內容有一個明確的1:1映射,並且代表不會處理UI中的任何東西,除了直接擁有的視圖控制器應該關心的東西外,您可以將代理一起傳遞到結尾並將其直接設置爲代表。這是代表的目的 - 能夠允許另一個不關心的對象與另一個對象進行通信。

也就是說,取決於分層策略的嚴格程度,您可能更喜歡通過擁有不同的代理來在每一步封裝信息。