2016-07-17 56 views
0

我有一個ViewController類。它有一個類別ViewController (Details),其執行:UIViewController與類別衝突之間傳遞數據

(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

打開一個項目的細節。

當我添加一個新按鈕到我的ViewController類時,我想將一些數據作爲NSArray *myData傳遞給另一個控制器,如SearchController。但是,我的prepareForSegue永遠不會執行,因爲它在ViewController (Details)之內。所以加入prepareForSegueViewController似乎忽略它。

如果我使用的工作裏面ViewController (Details)prepareForSegue版本,我SearchController的作品,但它不會看到伊娃NSArray *myDataViewController聲明。理想情況下,我不想聲明要在ViewController (Details)中設置的新數據變量,因爲它無關緊要。

如何通過數據按鈕,如果ViewController不執行prepareForSegueViewController (Details)沒有看到數據變量?任何建議?

+0

首先使用一些東西來存儲數據,比如CoreData,Realm或靜態引用,這並不重要。這裏最重要的是,如果你對數據使用單向流,你可能永遠不會再次遇到這個問題,因爲你不需要在類之間傳遞數據,相反,你會總是從單一的事實源獲取數據,而已。 –

+0

請顯示代碼---只有相關代碼---來自VC和類別。 – danh

+0

@JanCássio非常正確:vcs應該自己訪問應用程序的模型。但是,他們有時必須傳遞數據,例如,當用戶在vcA中選擇模型的某個方面,並且vcB的工作是提供有關它的詳細信息時,vcA將「傳遞數據」傳遞給vcB是合理和必要的,一個選擇。 – danh

回答

0

直到需要時才能使用類別。相反,如果需要在子模塊上劃分大型類,則應該使用類和複合模式。類別覆蓋類上的方法並以未定義的順序加載,有多個類別實現相同的方法可能會導致很難調試問題。類別不允許您在不使用關聯對象的情況下存儲任何實例,這些對象比ivars更加難看且費用更高。