我正在使用Parse和Facebook登錄。我的應用程序中的第一個屏幕是具有自定義Facebook登錄按鈕的登錄屏幕。基本上PFUser currentUser不能正確保存/檢索自定義屬性
[PFFacebookUtils logInWithPermissions:@[@"email"] block:^(PFUser *user, NSError *error) {
if (!user) {
[[[UIAlertView alloc] initWithTitle:@"Login error" message:error.description delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
return;
}
if (user.isNew) {
user[@"usernameIsSet"] = @NO;
[user saveEventually:nil];
}
if ([user[@"usernameIsSet"] boolValue] == NO) {
[self performSegueWithIdentifier:@"pushRegister" sender:self];
} else {
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
,我附加了一個名爲usernameIsSet
屬性爲PFUser
,因爲我想知道,如果用戶明確提供的用戶名,而不是自動解析之一:當點擊該按鈕,它執行此分配。這樣,應用程序打開的文本時間,根視圖控制器(標籤欄控制器)將檢查用戶是否已有用戶名,如果不是,則將「註冊」屏幕顯示爲模式。這就是標籤欄控制器的viewDidAppear
:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PFUser *currentUser = [PFUser currentUser];
if (currentUser) {
BOOL usernameIsSet = [currentUser[@"usernameIsSet"] boolValue];
if (!usernameIsSet) {
RegisterViewController *registerScreen = [[UIStoryboard storyboardWithName:@"iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"RegisterViewController"];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:registerScreen];
[self presentViewController:navController animated:YES completion:nil];
} else {
}
} else {
[self performSegueWithIdentifier:@"presentLogin" sender:self];
}
}
當註冊窗口出現,並在用戶名和完成按鈕的用戶類型被點擊時,下面的方法被觸發:
- (IBAction)doneButtonClicked:(id)sender {
PFUser *user = [PFUser currentUser];
user[@"username"] = self.textField.text;
user[@"usernameIsSet"] = @YES;
[user saveEventually:nil];
[self dismissViewControllerAnimated:YES completion:nil];
}
什麼我不不明白是這樣的:
該應用程序第一次安裝並運行時,上述所有代碼均按預期工作。顯示登錄,Facebook的權限被授予,然後出現註冊屏幕只是要求用戶分配一個用戶名。用戶名被分配,user[@"usernameIsSet"]
設置爲@YES
,模式被解除,標籤欄控制器的viewDidAppear
被調用,並且currentUser[@"usernameIsSet"]
仍然爲YES
。
但,當我從終止Xcode中運行,再次運行時,標籤欄控制器的viewDidAppear
會被執行並且currentUser[@"usernameIsSet"]
已經NO
。
這裏有什麼問題?我查看Parse中的數據瀏覽器,並且usernameIsSet
列包含true和用戶分配的用戶名。
你怎麼知道你殺了應用程序之前保存最終完成? – Wain
當應用程序啓動時,[[PFUser currentUser]]是否返回一個值?此時實際上是否有登錄用戶? –