2015-09-09 4 views
0

Это код, у меня есть: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. Если мой пользователь установил переключатель, чтобы увидеть инструкции, которые будут выполняться для первый пользователь. По какой-то странной причине, иногда, когда я выключаю выключатель (никаких инструкций), он остается установленным до тех пор, пока я не открою приложение, и он сразу меня направит. Кто-нибудь знает, почему он это делает?

+0

Почему вы так часто называете 'synchronize' на' NSUserDefaults'? Вам не нужно все это вызывать. Но если нужно, просто сделайте это один раз. – rmaddy

ответ

0

У меня плохой дизайн. Вы должны загрузить пользовательские настройки в делетете приложения (applicationDidLaunch:) и использовать делегат или объект настроек, когда ваши контроллеры просмотра хотят узнать значение параметра или изменить настройку. Вы можете легко получить свой делегат приложения, используя [UIApplication sharedApplication].delegate. Во-первых, viewDidAppear можно назвать более одного раза для заданного UIView

+0

PS: Да, это не отвечает на ваш вопрос напрямую, но иногда проблемы исчезают, когда ваш дизайн улучшается. –

+0

У вас есть прямой ответ? –

Смежные вопросы