NSUserDefaultsを使用して、誰かがアプリを初めて開いたかどうかを判断するアプリがあります。初めての場合、アプリはチュートリアルページを表示します。
ここで、ユーザーがON / OFFスイッチを「ON」に動かした場合に、アプリの起動時にチュートリアルが表示されないように変更したいと思います。ユーザーが選択したON/OFFスイッチをNSUserDefaultsに保存するにはどうすればよいですか?
NSUserDefaultsを使用して、誰かがアプリを初めて開いたかどうかを判断するアプリがあります。初めての場合、アプリはチュートリアルページを表示します。
ここで、ユーザーがON / OFFスイッチを「ON」に動かした場合に、アプリの起動時にチュートリアルが表示されないように変更したいと思います。ユーザーが選択したON/OFFスイッチをNSUserDefaultsに保存するにはどうすればよいですか?
私は次のコードでこのようなことをしました:
保管してください:
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];
必要なものを取得するには、2 つの 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];
}
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"];
}
}
私のアプリの 1 つで、NSUserDefaults が使用されているかどうかを確認し、使用されていない場合は、標準の User Default 変数が 1 つ設定されているかどうかを確認します。
-(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 までは、これが解決策でした。このソリューションに関するコメントを探しています。
1 つの方法は、単純にスイッチ ステータスの文字列を永続化することです。ユーザーが on の位置を好む場合は、string を保存します@"on"
。それ以外の場合は文字列を保存します@"off"
。
- (void) toggleUserPreference:(BOOL) preferOn {
NSString *newPreference = preferOn ? @"on" : @"off";
[[NSUserDefaults standardUserDefaults] setValue:newPreference
forKey:ONOFF_PREFERENCE_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
}