我想知道如何使用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的值,但是当人们在我的应用程序的配置文件页面上编辑他们的用户名时,它会被覆盖并变成关键字。在此之前,它只是变成了名字(没有价值)。
答案 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;
}
我解决了我的问题。