我有一个应用程序,我使用NSUserDefaults来确定它是否是第一次有人打开应用程序。如果是第一次,应用程序将显示教程页面。
现在,我想改变它,以便如果用户将ON / OFF开关移动到“ON”,他们在启动应用程序时将看不到教程。如何在NSUserDefaults中存储用户选择的ON / OFF开关?
答案 0 :(得分:7)
我使用以下代码做了类似的事情:
存储它:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:YES forKey:@"the_key"];
[[NSUserDefaults standardUserDefaults] synchronize]; //Thanks Henri Normak
检索它:
[[NSUserDefaults standardUserDefaults] objectForKey:@"the_key"]
答案 1 :(得分:3)
将其包裹在NSNumber numberWithBool中:。
[defaults setValue:[NSNumber numberWithBool:mySwitch.on] forKey:@"mySwitchValue"];
// and get it out
BOOL savedSwitch = [[defaults valueForKey:@"mySwitchValue"] boolValue];
答案 2 :(得分:1)
您需要在NSUserDefaults中保存两个bool密钥才能获得所需内容。例如 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];
}
将View上的UISwitch从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"];
}
}
答案 3 :(得分:1)
在我的一个应用程序中,我检查是否已使用NSUserDefaults,如果没有设置一个标准的User Default变量。
- (id)init
{
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,这都是一个解决方案。寻找有关此解决方案的评论。
答案 4 :(得分:-1)
一种方法是简单地保持具有开关状态的字符串。如果用户更喜欢on位置,则存储字符串@"on"
。否则存储字符串@"off"
。
- (void) toggleUserPreference:(BOOL) preferOn {
NSString *newPreference = preferOn ? @"on" : @"off";
[[NSUserDefaults standardUserDefaults] setValue:newPreference
forKey:ONOFF_PREFERENCE_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
}