2010-10-15 109 views
1

我一直在想這件事,並通過另一個stackoverflow question閱讀了有關在視圖控制器之間進行通信的最佳推薦方式。然而,這個問題/答案似乎並沒有解決逆向行爲的最佳方法。什麼是逆轉視圖控制器之間通信的最佳方式?

即從ParentController數據傳遞給它的ModalController,我們可以初始化ModalControllerinitWithDataToProcess:

但是如果我們想要做反向?我將如何通知前一位控制員有關新數據?

例如用戶點擊ParentController上的「新人」按鈕。我啓動一個新的ModalController,並通過presentModalViewController:向用戶提供人員編輯器視圖。用戶點擊'完成'添加一個新人。 I dismissModalViewController:和UI返回到ParentController的視圖。

使用全局字段引用單例對象(應用程序委託或其他)是不好的。 代表團(通過正式協議)和通知(通過NSNotificationCenter)似乎矯枉過正。有什麼建議麼?

+0

在.NET領域,這不是問題,因爲模態調用('ShowDialog()')是一個阻塞調用。 Objective-C/Cocoa與'presentModalViewController:' – JeffreySadeli 2010-10-15 16:06:28

回答

0

代表幾乎是你可以做的最低限度。如果您認爲爲此聲明新的協議太麻煩了,只需傳入父視圖控制器並讓模態調用一個方法就可以了。

+1

* HOW *你好嗎?只是通過它「...和」有模態的人叫它「嗎? (爲什麼很多人用「你這樣做......只是這樣做」來回答問題......而不是告訴你怎麼做?) – Patricia 2010-10-16 03:10:45

1

它通常使用通知更清潔。只需添加您的觀察者這樣....

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil]; 

,並在你的代碼的其他地方,只要你需要,你會發布通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self]; 

在這個例子中,我通過自己,但你可以通過你想真正的任何物體,它會被輸送到你的somethingHappened:功能

最重要的事情是保持@「MyNotification」很描述性和獨特性。將項目名稱添加到開頭是保持獨特性的好方法...例如。 @「ProjAXViewHasGotData」

相關問題