2012-12-24 39 views
-1

我正在寫我的第一個可可應用程序。在哪裏申報和初始化NSUserDefaults之類的?

現在,每當我需要NSUserDefaults時,我都會初始化該類的一個對象,並在本地範圍內使用它。

這有點乏味。所以我想知道在哪裏我應該把NSUserDefaults聲明和初始化,以便它可能適用於我所有的Application Delegate方法?

+2

不要ALLOC-INIT'NSUserDefaults'可言。使用共享實例('[NSUserDefaults standardUserDefaults]')。 – 2012-12-24 12:31:40

+0

爲什麼不使用sharedUserDefaults? –

回答

3

嘗試使用用戶默認

[NSUserDefaults standardUserDefaults]; 
1

無論您在何處需要調用默認值,都沒有任何問題。無論如何,這是一個單身人士。

如果你把它放到你的應用程序代理,你會只是調用到,同樣的方式來獲得NSUserDefaults的。

如果您想初始化您的應用程序的默認值,那麼您應用程序委託的方法爲+initialize

0

I'm initialising an object of the class and use it in the local scope.

它並不需要在所有的時候你應該簡單地使用這個單。如果你想在UserDefaults中保存某些東西,cocoa會爲你提供一個共享的實例/ Singleton。

每當你需要更新您保存的價值,你叫[NSUserDefaults standardUserDefaults]和使用它,只有一個實例將被保存爲您服務。

[[NSUserDefaults standardUserDefaults] setObject:yourObject forKey:@"yourKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
0

一個很好的方式做用戶默認值,是創建自己的PFXDefaults類(你最喜歡的前綴替換PFX),其中有用於訪問和不斷變化的,你關心的值的方法。這允許你寫

[[PFXDefaults sharedDefaults] setUserName:@"Nate"]; 

而不是

[[NSUserDefaults] setObject:@"Nate" forKey:@"userName"]; 

這是很方便的使這個類的前綴,或者,除非是,在您的應用程序可見(在.h文件中聲明)財產代表。

PFXDefaults界面看起來像

@interface PFXDefaults : NSObject 

@property (nonatomic) NSString *userName; 

@end 

和實施將看起來像

static NSString * const PFXDefaultUserNameKey = @"PFXDefaultUserNameKey"; 

@implementation PFXDefaults 

- (void)setUserAge:(NSString *)userName 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:userName forKey:PFXDefaultUserNameKey]; 
} 

- (NSInteger)userAge 
{ 
    return [[NSUserDefaults standardUserDefaults] stringForKey:PFXDefaultUserNameKey]; 
} 

@end 
+0

就我個人而言,我會將此功能放在類擴展中。 – sbooth

+0

使用NSUserDefaults的上一類肯定是另一種選擇 - 而且避免了引進新單的幽靈。 –