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 进行更多质量控制。
我已经为 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 进行更多质量控制。