PFUser currentUser nil 在 OS X 上重新启动应用程序后

PFUser currentUser nil after app restart on OS X

我已经为 OS X 下载了最新的 Parse SDK,并且我试图在应用程序重新启动后保留我的登录信息(很明显)。我以前使用过 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] 为零。我已经尝试了很多次,它产生了相同的结果。为什么?

折腾了半天,终于找到解决办法了。我需要 dispatch_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 进行更多质量控制。