3

我正在開發我的第一個iPhone應用程序,並且在實現用戶偏好的同時,我有幾個關於如何最好地實現這個問題的問題。在iPhone MVC應用程序中處理用戶首選項的最佳做法?

假定基本MVC模式:存儲在模型對象的MainView顯示數據; MainViewController處理應用邏輯。

對於選擇,我有一個OptionsView和OptionsViewController。 RootViewController處理Main和Options視圖的交換。

首先,選項數據呢?我想創建一個NSOjbect派生類來存儲它們(一個OptionsModel)嗎?或者,也許一個簡單的NSDictionary就足夠了?

二,誰擁有期權數據?它們是應用程序首選項,但將它們存儲在AppDelegate中似乎是錯誤的。 MainViewController主要關心這些選項,而OptionsViewController需要對它們進行編輯,但這些人不會彼此瞭解,也不應該這樣做。 RootViewController知道兩者,所以他很好地通過它們之間的選項,但是再次,這似乎是錯誤的。

最後,MainViewController將經常需要訪問的選項。他應該每次調用選項模型來獲得選項,還是緩存自己的副本?我不喜歡額外開銷檢索選項數據的想法,但讓MainViewController具有不同步的副本也不太吸引人。

+0

briankc,這非常有幫助,謝謝。但是我仍然想知道從OptionsViewController將編輯它們的選項傳遞給需要知道它們何時更改的MainViewController。 OptionsViewController可以通過寫NSUserDefaults的他們,然後發送NSNotification,將由MainViewController被拾起,然後將讀取的NSUserDefaults的選項。這是否合理? – zpasternack 2009-06-07 19:36:29

回答

8

看一看NSUserDefaults。這是一個爲此特定目的而設計的字典樣式集合類。

您存儲和檢索的默認值,像這樣:

// Fetch a default 
BOOL deleteBackup = [[NSUserDefaults standardUserDefaults] boolForKey:@"DeleteBackup"]; 

// Save a default 
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"DeleteBackup"]; 
NSUserDefaults的

將自動的讀取和序列化到磁盤上的照顧。

關於你的另一個問題,它取決於你的應用程序的整體架構。 OptionsViewController完成時發送通知對我來說聽起來像是一個合理的方法。但是,您也可以在您的MainViewController或應用程序委託(即「-reloadUserDefaults」)上定義一個方法,您可以在OptionsViewController完成時調用它。

+0

爲了進一步擴展,您還可以使用一個Settings包,它使用(加載)到NSUserDefaults中,並將您的首選項安裝到iPhone本身的Settings應用程序中。因此,用戶首選項可以在應用程序本身之外進行更改。 這是Apple首選的方法。 – 2009-06-07 19:27:29

相關問題