2011-06-03 116 views
1

在Xcode 4中使用「Tab Bar」模板,每個ViewController都是自動創建的,所以我沒有機會在創建ViewController時設置任何屬性。我希望每個ViewController都可以訪問一個對象(FMDB的FMDatabase的一個實例)。你如何在iOS上的ViewControllers之間傳遞一個對象?

有許多有關這個已經在計算器上的問題,但也有一些假設你正在創建VC的手,和其他人建議使用的AppDelegate作爲調解人:

MyAppDelegateClass *appDelegate = [[UIApplication sharedApplicaton] delegate]; 
myLocalProperty = appDelegate.someDataModelProperty; 

上面似乎而是對我來說「哈克」。有沒有更好的方法來訪問多個ViewController中的單個對象?

+0

即使使用Tab Bar模板,您也將擁有視圖控制器的自定義子類。他們很可能會'FirstViewController'和'SecondViewController'。一探究竟。您可以在那裏進行更改。 – 2011-06-03 13:37:22

+0

我也想回答這個問題。好的時機! – Legolas 2011-06-03 13:39:57

+0

我不認爲這是「hacky」,如果它不需要根據視圖進行更改,則比將其傳遞給每個子視圖的控制器更容易。最好使它只讀,以便隨後的對象可以對其進行修改,但不能偷偷替換它,如果這對您正在處理的數據有效。 – 2011-06-03 22:30:18

回答

3

FMDB數據庫最可能的實現方式是將其作爲Singleton實現並通過應用程序訪問它。有沒有理由不這樣做?

此鏈接可以幫助你這樣做: How do I make FMDB's database a singleton

+0

順便說一句 - 你鏈接的例子可能遭受2線程調用'+ sharedSQLiteDB'的競爭條件「同時」。你可以在'+(void)load'中創建你的單例實例,或者在'+ sharedSQLiteDB'中添加一個鎖定代碼。 – nielsbot 2011-06-03 22:27:38

+0

我並不喜歡在我的控制器中噴灑SQL查詢,但是基於這個我創建了一個單例這個類以更加可可的方式管理我的數據庫交互,謝謝! – Drarok 2011-06-03 23:43:43

0

要擴大KKK4SO的答案,你可以實現數據庫作爲一個單身。然後,讓所有的UIViewController都是一個子類UIViewController,它包含訪問和修改數據庫單例的方法。

0

MyAppDelegateClass * appDelegate = [[UIApplication sharedApplicaton] delegate]; myLocalProperty = appDelegate.someDataModelProperty;

此代碼中存在拼寫錯誤'sharedApplicaton'拼寫錯誤,它應該是'sharedApplication'。

恥辱我複製和粘貼!無論如何,這將適用於在ViewControllers之間傳遞數據的快速和骯髒的方式。