我正在使用Parse和Facebook登录名。我的应用程序中的第一个屏幕是带有自定义Facebook登录按钮的登录屏幕。单击该按钮时,它将执行以下操作:

[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的属性,因为我想知道用户是否已明确提供了一个用户名,而不是Parse自动分配的用户名。这样,打开应用程序的文本时间,根视图控制器(选项卡栏控制器)将检查用户是否已经具有用户名,如果没有,则将注册屏幕显示为模式。这是标签栏控制器的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,以及用户分配的用户名。

最佳答案

答案似乎是:

saveEventually目前不写任何缓存,
(包括currentUser)(如果应用已重新启动)。你需要
定期调用fetch使其保持最新状态。

来自:https://parse.com/questions/when-you-modify-a-pfuser-does-it-write-through-the-authenticated-user-cache

关于ios - PFUser currentUser无法正确保存/检索自定义属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21361280/

10-11 07:01