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