1

この問題の適切な解決策が見つかりません。私が作成しているアプリでは、ユーザーがいつでもユーザー名を変更できるようにしています。そのため、ユーザーが設定ページに移動して情報を更新するときに、次のことを行います。

PFUser *modifiedCurrent = [PFUser currentUser];
[modifiedCurrent setObject:username.text forKey:@"username"];
[modifiedCurrent setObject:name.text forKey:@"additional"];
[modifiedCurrent setObject:email.text forKey:@"email"];
[modifiedCurrent saveInBackgroundWithBlock:^(BOOL success, NSError *error) {
    if (error) {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle: @"Error"
                              message: [NSString stringWithFormat:@"%@",[[error userInfo]  
                              objectForKey:@"error"]]
                              delegate:self
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
        [alert show];
    } else {
        [self.navigationController popViewControllerAnimated:YES];
    };
}];

ユーザーが既に使用されているユーザー名を選択した場合、サーバーは明らかにエラーを返し、データベースを更新しません。ただし、[PFUser currentUser] のキャッシュされたバージョンは、エラーがあったかどうかに関係なく、ユーザー名フィールドを更新するようです。これを防ぐにはどうすればよいですか?または、以前の「正当な」ユーザー名に戻すにはどうすればよいですか?

4

1 に答える 1

2

変更を試みる前に、そのユーザー名を持つユーザーが存在するかどうかを照会します。エラーが実際に衝突に登録されていることに、私は実際に驚いています。

それ以外の場合は、ユーザー オブジェクトで fetch を呼び出すことができます。

于 2013-08-09T10:19:23.553 に答える