【问题标题】:PFUser currentUser nil after app restart on OS X在 OS X 上重新启动应用程序后 PFUser currentUser nil
【发布时间】:2015-09-28 15:43:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 进行更多的质量控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 2016-05-30
      相关资源
      最近更新 更多