2013-11-25 34 views
2

我正在使用設置包來配置我的應用程序。作爲一種副作用,在iOS設置的應用程序外部可以使用相同的一組設置。這很棒。但是有一個小問題 - 我確實需要對這些變化做出反應。例如,我有一個用戶正在使用的名稱被別人識別,如果它更改,則必須發生服務器調用。如何處理?Settings.bundle:應用程序應該如何識別值在應用程序之外被更改的事實?

編輯:放輕鬆,傢伙。我從來沒有這樣做過,很難閱讀所有可用的指導方針。 Settings.bundle不是一個明顯的事情來處理。無論如何,請隨意投下問題,但至少需要一分鐘時間,並在通過之前閱讀所有表揚。

嘗試了幾種建議的方式,即使用通知,並在應用程序變爲活動狀態時更直接地處理默認值。第二種方法效果更好,因爲它只在我期望的時候執行,而不是每次在應用程序中更改/添加/刪除任何配置設置。

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSString *nameOld = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 

    NSString *nameNew = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey]; 
+0

檢查值。與其他地方的保存版本進行比較。 – Wain

+0

不知道誰downvoted ...我完全知道如何添加觀察員。這是一個明確的技術。我想知道從iOS設置屏幕回來。我的事情@Duncan Groenewald給了我一個主意。 – Schultz9999

+0

@MartinR我不知道爲什麼這是一個dup。這個問題沒有什麼能解決我的問題。這裏也沒有說什麼https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html。所以請詳細說明。 – Schultz9999

回答

2

您應該檢查此appDelegate方法中設置的更改。

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Check for any changes to settings 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
    bool userICloudChoice = [userDefaults boolForKey:_cloudPreferenceKey]; 
} 
+0

啊..那麼在同步前先獲得一箇舊值,然後同步並獲得一個新值? – Schultz9999

+0

@ 0x7fffffff整個NSUserDefaults的副本?我想我可以爲有一種方法來表示它作爲一個字典。 – Schultz9999

+0

我只是調用同步,因爲我發現如果用戶更改了設置包中的應用設置(使用iOS設置應用),那麼除非我調用同步應用程序並不總是立即看到這些更改。因此,我假定(可能錯誤地)您希望能夠檢測用戶何時使用應用中的iOS設置應用更改應用設置,然後做出相應響應。 –

相關問題