2015-09-28 6 views
0

Я загрузил последнюю версию Parse SDK для OS X, и я пытаюсь сохранить мой логин после перезапуска приложения (очевидно). Я использовал Разбор раньше, и я не не сталкивался с этой проблемой, ни на прошивку, ни OS X.PFUser currentUser nil после перезагрузки приложения на 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] - это нуль. Я пробовал это много раз, он дает те же результаты. Зачем?

ответ

1

После долгой работы я нашел решение. Мне нужно dispass_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.

+1

Был такой же вопрос! Это решило это. – Alex