我是新來的iOS開發,並做了一個簡單的應用程序。iOS開發 - 視圖如何反應在應用程序中的設置動態
它包含一個根視圖控制器(一個表格視圖由單元格列表組成,單元格導致內容視圖)和另一個應用內設置視圖控制器包含幾個簡單的UI控件,如開關,滑塊以保存應用程序相關設置。用戶修改某些內容後,應用程序只需將文件寫入持久性文件。
我的問題是,如何讓其他視圖控制器反映設置的變化?
我的想法是當應用程序加載時,我將所有設置初始化爲字典並將其保存在內存中。發生更改時,除了寫入文件外,我還更新該字典。每次我的內容視圖顯示時,我都會要求它始終加載該設置字典。
例如,如果用戶在設置視圖中更改字體大小,我希望內容視圖控制器得到通知,並且特此在下次顯示給用戶時立即更改字體大小。
我不知道我是否應該讓我的自定義委託/數據源。
任何幫助表示讚賞。
NSUserDefaults應該用來保存用戶的喜好。我會用它來存儲字體大小,以便在下次啓動時字體大小保持不變。但是,我不會用它來發送通知給ViewControllers。 – rocky 2013-02-13 18:21:54
我不建議用它來發送通知到視圖控制器。我在談論視圖控制器在NSUserDefaults發生變化時註冊接收通知 - 不管是什麼原因引起的變化 - 然後做出相應的反應。這是一個重要的設計差異。它使代碼的各個部分鬆散耦合,這通常是一個好主意。更細的通知可能是可取的,在這種情況下,他們可以手動發佈。 FWIW,NSUserDefaults更改可以使用10.7+上的KVO或10.3 +上的NSUserDefaultsController來觀察。 NSUserDefaults的KVO也可以在iOS上運行(不是100%確定)。 – 2013-02-13 18:34:46
+1 @Andrew NSUserDefaultsDidChangeNotification動態更新**視圖(儘管OP可能有點矯枉過正)。但是,viewWillAppear:對於每個VC,我會手動從NSUserDefaults讀取設置,以防其中一個VC尚未初始化(因此不會偵聽這些通知)。 – lreichold 2013-02-13 18:46:40