Это код, у меня есть:NSUserDefaults Обнаружить первый раз запуск и UISwitch Glitch
FirstViewController
-(void)viewDidAppear:(BOOL)animated {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
// app already launched
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
// This is the first launch ever
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
InitialViewController *viewController = (InitialViewController *)[storyboard instantiateViewControllerWithIdentifier:@"InitialViewController"];
[self presentViewController:viewController animated:YES completion:nil];
}
}
А вот мои настройки просмотра контроллера:
Просмотр настроек контроллера
- (void)viewDidLoad {
[super viewDidLoad];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) {
[showinstructionsonstartup setOn:YES animated:YES];
[[NSUserDefaults standardUserDefaults] synchronize];
}
else {
[showinstructionsonstartup setOn:NO animated:YES];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if (showinstructionsonstartup.on) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
else {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// Do any additional setup after loading the view.
}
По какой-то причине этот код возвращает странный вывод: я пытаюсь увидеть 2 вещи: 1. Если мой пользователь является первым пользователем и 2. Если мой пользователь установил переключатель, чтобы увидеть инструкции, которые будут выполняться для первый пользователь. По какой-то странной причине, иногда, когда я выключаю выключатель (никаких инструкций), он остается установленным до тех пор, пока я не открою приложение, и он сразу меня направит. Кто-нибудь знает, почему он это делает?
Почему вы так часто называете 'synchronize' на' NSUserDefaults'? Вам не нужно все это вызывать. Но если нужно, просто сделайте это один раз. – rmaddy