【问题标题】:Handling duplicate username error on PFUser currentUser cache处理 PFUser currentUser 缓存上的重复用户名错误
【发布时间】:2013-08-09 18:19:23
【问题描述】:

我找不到此问题的正确解决方案。在我正在创建的应用程序中,我允许用户随时更改他们的用户名。因此,当他们转到设置页面并更新他们的信息时,我会执行以下操作:

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] 的缓存版本似乎都会更新用户名字段。我该如何防止这种情况发生?或者如何恢复到以前的“合法”用户名?

【问题讨论】:

    标签: ios objective-c caching login parse-platform


    【解决方案1】:

    在尝试更改之前,我会查询具有该用户名的用户是否存在。我真的很惊讶实际上在碰撞中注册了一个错误。

    否则,您可以在用户对象上调用 fetch。

    【讨论】:

    • 我曾想过使用该用户名查询用户,但不想占用我的 API 使用量。但是,我还是决定这样做,因为人们不应该经常更改用户名。
    • 是的,可能更安全。用户对象处于陈旧状态时,我遇到了很多麻烦。由于后端数据的变化,只有在测试期间才会真正发生......
    • 您知道,最终您将不得不考虑使用一些服务器代码来执行此操作:可以想象,您可以查询是否存在新用户名 XYZ,然后当您准备保存该用户名时,其他一些人可以创建一个具有该名称的用户!通常 Parse 没有设置来处理锁等。你说得对 Pork,当 PFUser 数据在开发过程中变得陈旧时很烦人,你在服务器上删除了一个用户,但它仍然可以在本地工作,呵呵!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多