2011-11-06 47 views
4

我希望觀察[NSUserDefaults standardDefaults]中設置值的更改。我正在使用InAppSettingsKit來訪問和更改程序中的設置。到目前爲止,我只假定所有值都已更改,並將通知發送給所有觀察員,以根據新值進行更新。這並不高效,我只想在發生相關變更時向觀察員發送通知。觀察對NSUserDefaults中單個設置的更改

有人可以建議一個有效的方法來做到這一點?

我能否假定[NSUserDefaults standardDefaults]中的任何鍵的值都不是數組,字典或集合? (使用設置對我來說是新的,如果我必須對變化進行強力掃描,比較前字典和後字典,這可能會有所幫助,並且不需要任何遞歸。)

如果這已經在InAppSettingsKit中,我還沒有看到它,如果有人能指出它,我會很高興。

+0

http://stackoverflow.com/questions/1141388/cocoa-notification-on-nsuserdefaults-value-change –

回答

1

沒有系統通知保存哪些默認值已更改的詳細信息。因爲我沒有使用它,所以我不能說出inappsettings套件。

對響應更改的個別對象應保存其相關默認設置的本地值,並且只在必要時執行昂貴的操作。因此,對通知作出迴應應該是一個簡單的操作。如果你有兩個單獨的對象來響應一個單一的dafaults鍵中的不同子對象,那麼你可能想重新考慮如何組織你的默認值。如果你有一些具體的例子,請把它們包含在你的問題中。

在重寫您的整個應用程序以使某種類型的缺省管理器對象名稱爲「效率」之前,請進行測試以確保您實際上正在浪費大量的用戶體驗,從而影響有大量對象響應通知,否則你是過早優化,你知道他們對此說什麼。

在回答問題的第二部分時,你不能做出這樣的假設。任何屬性列表對象都可以存儲在用戶默認值中。

+0

我打算採納你的建議。有一些設置會影響用於搜索和顯示數據的謂詞。我會假設只有這些已經改變並且在設置面板被解除之前觸發可以使它們更新的通知(所以用戶在發生改變時不會注意到這些改變)。我會檢查其他設置的變化懶惰的方式。 – Jim

+1

+1「測試以確保您實際上正在浪費顯着的用戶體驗,影響時間量」。以「性能」名稱編寫的代碼太多不應該寫入,特別是在iOS上。但是,應該注意的是,即使用戶沒有注意到性能問題,他們的電池也可能會;) –

0

裝訂在iOS中尚未提供。