PFUser currentUser ноль после перезапуска приложения в OS X

Я загрузил последнюю версию Parse SDK для OS X и пытаюсь сохранить свой логин после перезапуска приложения (очевидно). Я использовал Parse раньше и не сталкивался с этой проблемой ни на iOS, ни на OS X.

При запуске моего приложения:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    [Parse setApplicationId:@"XXX" clientKey:@"XXX"];
}

В моем первом контроллере представления:

-(void)viewDidAppear{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if(![PFUser currentUser]){
            [self performSegueWithIdentifier:@"login" sender:nil];
        }else{
            ...
        }
    });
}

Мой вход в систему выполнен успешно, и в этот момент [PFUser currentUser] действителен. Затем я закрываю приложение (попробовал и убить, и изящно выйти). Когда я открываю его снова, [PFUser currentUser] равно нулю. Я пробовал это много раз, это дает те же результаты. Почему?


person Can Poyrazoğlu    schedule 28.09.2015    source источник


Ответы (1)


После долгой борьбы я нашел решение. Мне нужно отправить_async блок проверки пользователя, и он начнет работать. Итак, вместо:

dispatch_once(&onceToken, ^{
    if(![PFUser currentUser]){
        [self performSegueWithIdentifier:@"login" sender:nil];
    }else{
        ...
    }
});

Я сделал:

dispatch_once(&onceToken, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        if(![PFUser currentUser]){
            [self performSegueWithIdentifier:@"login" sender:nil];
        }else{
            ...
        }
    });   
});

И он начал работать. Интересно видеть, что что-то все еще не инициализируется на viewDidAppear синхронно в основной очереди (да, это и есть основная очередь, дважды проверил это), но инициализируется где-то после асинхронной публикации в той же очереди. Parse определенно нуждается в большем контроле качества своего SDK.

person Can Poyrazoğlu    schedule 03.11.2015