2014-07-09 89 views
0

我的應用程序有一個設置,可以讓我關閉ui聲音或打開它。我用這個值:如何實現NSUserDefaults保存偏好

+ (void)setUISoundsEnabled:(BOOL)UISoundsEnabled 
{ 
    __UISoundsEnabled = UISoundsEnabled;  
} 

這裏是我的視圖控制器中的一個通知,監聽偏好更改,然後更新聲音設置。

- (void)preferencesDidChange:(NSNotification *)note 
{ 
    NSMutableArray *changedPreferences = note.object; 
    if ([changedPreferences containsObject:@"localPlayUISounds"]) { 
     [FHSSound setUISoundsEnabled:PREFS.localPlayUISounds]; 

    } 

2個問題:

第一個問題:如何去獲取保存在PREFS匹配保存在頂部的BOOL設置的設置。

第二個問題: 我將如何實現NSUserDefaults來保存和加載這些數據。具體來說,我在哪裏實施NSUserDefaults來保存並加載這些數據。我不熟悉,所以NSUserDefaults的例子將是非常有益

請讓我知道如果你需要任何代碼或有任何其他問題

+0

我有點困惑,在這裏是'PREFS '來自哪個變量,以及您使用'preferencesDidChange:'觀察和響應了​​什麼通知? –

+0

''#define PREFS [FISettings sharedSettings]' – user3786510

+0

'@property(nonatomic,assign)BOOL localPlayUISounds;' – user3786510

回答

1

這很簡單。您原樣使用NSUserDefaults;沒有必要繼承子類。

// read the setting when you start the app 
flag = [[NSUserDefaults standardUserDefaults] boolForKey:"someKey"] 

// set the setting if user can change it inside your app 
[[NSUserDefaults standardUserDefaults] setBool:flag forKey:"someKey"] 

這也可能是最好創建一個設置plist文件使這些設置可以在設置應用程序可以再改。如果你這樣做,你還應該聽取NSUserDefaultsDidChangeNotification以防用戶在後臺進行設置時更改設置應用程序中的設置。

... 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) 
              name:NSUserDefaultsDidChangeNotification object:nil]; 

... 
- (void)defaultsChanged:(id)sender { 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    // and notify your observers as necessary based on new settings... 
} 

應用了先進的設置也往往包含有「初始」默認值預填充的plist,因爲直到用戶在設置應用程序的東西你standardUserDefaults將不包含任何值:

NSURL *defaultSettingsURL = [[NSBundle mainBundle] URLForResource:@"DefaultSettings" withExtension:@"plist"]; 
    self.bundledDefaults = [NSDictionary dictionaryWithContentsOfURL:defaultSettingsURL]; 

你可以在第一次運行時將bundledDefaults轉儲到設置中,或者只要您從用戶默認值中讀取,只需將它們用作備份即可。

0

下面是我如何解決它,而不使用NSUserDefaults。

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

[self setSoundPreferences]; 
} 

通知設置爲監聽在首選項

- (void)preferencesDidChange:(NSNotification *)note 
{ 
NSMutableArray *changedPreferences = note.object; 
if ([changedPreferences containsObject:@"localPlayUISounds"]) { 
    [FHSSound setUISoundsEnabled:PREFS.localPlayUISounds]; 
} 
else if ([changedPreferences containsObject:@"localPlayAlertSounds"]) { 
    [FHSSound setAlertSoundsEnabled:PREFS.localPlayAlertSounds]; 
} 

和變更,在推出最後設置首選項的

#pragma mark (launch) 
- (void)setSoundPreferences 
{ 
[FHSSound setUISoundsEnabled:PREFS.localPlayUISounds]; 
[FHSSound setAlertSoundsEnabled:PREFS.localPlayAlertSounds]; 
}