如何获取Firebase数据库中密钥的值并将其传递给TextField?

时间:2018-01-13 14:06:42

标签: ios objective-c firebase firebase-realtime-database

我想知道如何使用Objective C在我的JSON数据库中找到密钥的值并将其传递给文本字段。我想从我的数据库中的第3个密钥中收集数据(当然不包括标题节点),但是关于如何进行的每个解释似乎都不起作用。遍历到正确位置的代码是:

FIRUser *user = [FIRAuth auth].currentUser;
NSString* username = _usernameEntry.text;
if (user)
{
    [[[[_ref child: @"Users"] child:user.uid] child:@"Username"]observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot)
    {
        User *username = [[User alloc] initWithUsername:snapshot.value[@"username"]];
    }
    withCancelBlock:^(NSError * _Nonnull error)
    {
        NSLog(@"%@", error.localizedDescription);
    }];

    _emailAddressEntry.text = user.email;
}
对我来说。我的目的是在视图控制器导航到时,用户名文本字段显示当前用户名。这样,用户可以看到它现在是什么并编辑它,如果有任何错误/不满意的话(与电子邮件文本字段的完成方式类似)。

Side Note,用户名和电子邮件的存储/修改如下:

NSString *userID = [FIRAuth auth].currentUser.uid;
NSString* username = _usernameEntry.text;

[[[_ref child:@"Users"] child:userID] setValue:@{@"Username": username}];

[[FIRAuth auth].currentUser updateEmail:_emailAddressEntry.text
                             completion:^(NSError * _Nullable error)
 {
     if(error)
     {
         [_emailValidationCheck setTextColor:[UIColor redColor]];
         _emailValidationCheck.text = @"Email Address modification was unsuccessful";
     }
     else
     {
         [_emailValidationCheck setTextColor:[UIColor greenColor]];
         _emailValidationCheck.text = @"Email Address modification was successful";
     }
 }];
}

此外,我还有一个关于另外两件事的问题。 1)为什么在此遍历中始终会覆盖userID密钥?我将其定义为在注册视图控制器中具有名称User_ID和uid的值,但是当人们在我的应用程序的配置文件页面上编辑他们的用户名时,它会被覆盖并变成关键字。在此之前,它只是变成了名字(没有价值)。

1 个答案:

答案 0 :(得分:0)

FIRUser *user = [FIRAuth auth].currentUser;

if (user)
{
    [[[[_ref child: @"Users"] child:user.uid] child:@"Username"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot)
    {
        if (snapshot.exists)
        {
            _usernameEntry.text = snapshot.value;
        }
    }];

    _emailAddressEntry.text = user.email;
}

我解决了我的问题。