应用程序在OS X上重新启动后,PFUser currentUser为零

时间:2015-09-28 15:43:39

标签: macos parse-platform pfuser osx-elcapitan parse-osx-sdk

我已经下载了最新的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]为零。我已经尝试了很多次,它产生了相同的结果。为什么呢?

1 个答案:

答案 0 :(得分:1)

经过一段时间的挣扎,我找到了解决方案。我需要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进行更多质量控制。