我正在写我的第一个Cocoa应用程序。
现在,每次我需要NSUserDefaults
时,我都会初始化类的对象并在本地范围内使用它。
这有点乏味。所以我想知道我应该在哪里放置NSUserDefaults
声明和初始化,以便它可以用于我的所有Application Delegate
方法?
答案 0 :(得分:3)
在尝试使用用户默认值时,您应该只使用此单例
[NSUserDefaults standardUserDefaults];
答案 1 :(得分:1)
在任何需要的位置调用默认值都没有错。无论如何,这是一个单身人士。
如果你把它放到你的app委托中,你就会以同样的方式调用它来获取NSUserDefaults。
如果您要初始化应用的默认设置 - 可以在应用代理的+initialize
方法中执行此操作。
答案 2 :(得分:0)
I'm initialising an object of the class and use it in the local scope.
根本不需要。如果你想在UserDefaults中保存一些东西,cocoa会为你提供一个共享的实例/单例。
每当您需要更新已保存的值时,请致电[NSUserDefaults standardUserDefaults]
并使用它,并且只会为您保存一个实例。
[[NSUserDefaults standardUserDefaults] setObject:yourObject forKey:@"yourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
答案 3 :(得分: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