我有一个应用程序,我使用 NSUserDefaults 来确定它是否是第一次有人打开该应用程序。如果是第一次,应用程序会显示一个教程页面。
现在,我想对此进行更改,以便如果用户将 ON/OFF 开关移动到“ON”,他们在启动应用程序时将看不到教程。如何在 NSUserDefaults 中存储用户对 ON/OFF 开关的选择?
我有一个应用程序,我使用 NSUserDefaults 来确定它是否是第一次有人打开该应用程序。如果是第一次,应用程序会显示一个教程页面。
现在,我想对此进行更改,以便如果用户将 ON/OFF 开关移动到“ON”,他们在启动应用程序时将看不到教程。如何在 NSUserDefaults 中存储用户对 ON/OFF 开关的选择?
我用下面的代码做了这样的事情:
存储它:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:YES forKey:@"the_key"];
[[NSUserDefaults standardUserDefaults] synchronize]; //Thanks Henri Normak
检索它:
[[NSUserDefaults standardUserDefaults] objectForKey:@"the_key"]
将其包裹在 NSNumber numberWithBool: 中。
[defaults setValue:[NSNumber numberWithBool:mySwitch.on] forKey:@"mySwitchValue"];
// and get it out
BOOL savedSwitch = [[defaults valueForKey:@"mySwitchValue"] boolValue];
您需要将两个 bool 键保存在 NSUserDefaults 中才能获得您想要的。例如firstTime用于检查应用程序首次启动,showTutorial用于检查/保存开关更改
您可以使用以下方法设置布尔值:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstTime"];
并使用以下代码阅读:
if([[NSUserDefaults standardUserDefaults] boolForKey:@"showTutorial"] || [[NSUserDefaults standardUserDefaults] boolForKey:@"firstTime"]) {
[self displayTutorial];
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstTime"];
}
else {
[self displayMainScreen];
}
将 UISwitch on View 从 InterfaceBuilder 链接到 valuechanged 上的此操作
-(IBAction)userSetOnOff:(id)sender
{
UISwitch *switchValue = sender;
if (switchValue.on){
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"showTutorial"];
}
else{
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"showTutorial"];
}
}
在我的一个应用程序中,我检查是否使用了 NSUserDefaults,如果没有设置一个标准的用户默认变量。
-(id)初始化
{
standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *testInitState = [standardUserDefaults stringForKey:kInstallInit];
if (testInitState == nil)
{
#if(kStateModelDebug)
NSLog(@" State Model: First time initialized");
#endif
[self.standardUserDefaults setObject:@"true" forKey:kInstallInit];
[self.standardUserDefaults synchronize];
// Start the tutorials, init DB, etc
}
else
{
#if(kStateModelDebug)
NSLog(@" State Model has ALREADY been initialized");
#endif
// Read other state variables and/or init the startup processes
}
return self;
}
到目前为止,直到 ios 5.0 和新的 6.0,这一直是一个解决方案。寻找对此解决方案的评论。
一种方法是简单地保留一个带有开关状态的字符串。如果用户更喜欢 on 位置,您将存储 string @"on"
。否则存储字符串@"off"
。
- (void) toggleUserPreference:(BOOL) preferOn {
NSString *newPreference = preferOn ? @"on" : @"off";
[[NSUserDefaults standardUserDefaults] setValue:newPreference
forKey:ONOFF_PREFERENCE_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
}