0

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

4

1 回答 1

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 进行更多的质量控制。

于 2015-11-03T00:13:13.047 回答