2013-07-29 30 views
2

我在想如何在iPhone XCode storyboard ViewControllers中實現多態。故事板ViewControllers中的多態性

這是我的問題:在我的應用 兩種不同ViewControllers被segueing一個共同的ViewController。

這個常見的ViewController的行爲有所不同,具體取決於它所面臨的VC - 執行不同的遠程API服務器調用和CoreData提取(第一個呈現表中的所有用戶,另一個呈現管理員列表 - 用戶的子類,我可能會有第三個將呈現過濾的用戶列表)。

這個共同的ViewController在我的應用程序非常中心,和塞格斯許多其他ViewControllers。因此,我認爲在一個子類上在滑雪板上覆制它並不合適。

傳遞用戶到ViewController的名單是以下的選項遺憾的是,因爲這個名單上的不同搜索進行和整個的ViewController方法來實現。

這是有道理的落實子類,並根據產地SEGUE使用多態,並在故事板分配的ViewController子類,這些不同的行爲。

有什麼辦法來segueing時動態地設置故事板視圖控制器類?

+0

我看不出有任何理由在您共同視圖控制器添加屬性,以確定哪些UIViewController的你從此做相應的調用segueing。 – limon

+0

@mstfbsnli我明白你的觀點,但我正在尋找更精簡的班級和更乾淨的代碼解決方案。我試圖在不同的VC方法中避免if-else if-else條件 –

回答

2

不同的遠程API調用服務器和CoreData取進行

你真正呼喚這裏是數據接口比視圖界面不同。沒關係。您應該提取一個負責獲取數據的獨立對象。您可以將該對象傳遞給視圖控制器,而不是多視圖視圖控制器。這被稱爲策略模式,在可可中非常普遍。

這與代表團幾乎相同,您也可以在此處使用代表團。當你繼續時,主叫視圖控制器在接收視圖控制器上設置一個委託。然後該委託負責返回數據對象,從而再次釋放接收視圖控制器的變形。

+0

這個答案很好,我會實現這個方法,但是我明白,在同樣的意義上 - 無法動態設置ViewController類。我對麼? –

+0

肯定有辦法:)對於這類問題,這不是一個好主意。您可以在運行時將接收類改爲不同的類。但是,這將是一個可怕的想法。如果你犯了任何錯誤(比如在子類中添加一個ivar;我犯了這個錯誤一次),Isa-swizzling會導致非常驚人的錯誤。 –

+0

欲瞭解更多信息:http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW4 –