【问题标题】:Issue retrieving data from firebase database ios从 Firebase 数据库 ios 检索数据的问题
【发布时间】:2017-01-15 07:48:14
【问题描述】:

目前我有一个使用 Firebase 数据库存储用户的应用: 姓名 学校 主题 在三个单独的文本字段中。

现在我已经设法让用户在这三个文本字段中输入他的详细信息并点击一个标记为更新的按钮,然后将数据发送到我的 firebase 控制台。

这意味着用户可以输入他们的详细信息,点击更新并在他们登录时查看它们。然而,一旦他们注销并再次登录,文本字段就是空白的,尽管 firebase 将信息存储在其服务器上.

我整天都在玩,试图让它工作,但无济于事。

这里我们有 firebase 参考和身份验证:

    self.rootRef = [[FIRDatabase database] reference];  
    self.user = [FIRAuth auth].currentUser; 

以及将用户信息发送到 firebase 数据库的更新按钮代码:

- (IBAction)didTapEditProfile:(id)sender {  

if (![_textFieldOne.text  isEqual: @""]) {  

    NSString *item = _textFieldOne.text;  

    [[[[_rootRef child:@"users"] child:_user.uid] child:@"Name"] setValue:item];  
}  

if (![_textFieldTwo.text  isEqual: @""]) {  

    NSString *itemTwo = _textFieldTwo.text;  

    [[[[_rootRef child:@"users"] child:_user.uid] child:@"School"] setValue:itemTwo];  

}  

if (![_textFieldThree.text  isEqual: @""]) {  

    NSString *itemThree = _textFieldThree.text;  

    [[[[_rootRef child:@"users"] child:_user.uid] child:@"Subject"] setValue:itemThree];  

}  

}  

我遇到的问题是在下面位于 viewDidAppear 中的代码中检索数据:

    [[_rootRef child:@"users"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {  

    NSDictionary *usersDict = snapshot.value;  

    NSLog(@"%@",usersDict);  

   [usersDict objectForKey:_user.uid];  

   //I've tried numerous solutions here to get the text fields to display the info from the database   
    mainly: 
 NSString *field;
 field = _textFieldOne.text;
 field = [userDict objectForKey @"Name"];

 The code i'm attempting to translate from looks like this:    
 field(userDict?.objectForKey("Name") as? String)

}]; 

有什么想法吗?

【问题讨论】:

  • 你试过什么?你不应该只是说我已经尝试了很多解决方案
  • 我已编辑以显示我一直在尝试的内容
  • 您需要将该字段分配给文本字段文本,以便文本字段更新。目前你只将它存储在一个对象中

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


【解决方案1】:

我设法将所有内容排序如下:

-(void)configure:(NSString *)field {

    _textFieldOne.text = field;

}

然后在代码中我遇到了问题:

    [[_rootRef child:@"users"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {  

    NSDictionary *usersDict = snapshot.value;  

    NSLog(@"%@",usersDict);  

    [usersDict objectForKey:_user.uid];  

    [self configure:[userDict objectForKey:@"Name"]];


}]; 

感谢您的帮助。

【讨论】:

    【解决方案2】:

    嘿 Joshua,我已经实现了 firebase 并成功地从 firebase 中检索了数据,但问题是我已经快速实现了它......如果这对你有帮助的话,这是我的实际代码......

    **rootRef.queryOrderedByChild("search what you want like specific name etc etc").observeEventType(.ChildAdded, withBlock: { snapshot in
                if snapshot.value is NSNull {
                    print("the chat model is null")
                    SVProgressHUD.dismiss()
                    SVProgressHUD.showErrorWithStatus("No messages")
                }
                else {
                    print(snapshot) }**
    

    或者,如果你想获取整个数据库 JSON,这里是查询

    **rootref.observeEventType(.ChildAdded) { (snapshot: FDataSnapshot!) in
        // 3
        let id = snapshot.value["senderId"] as! String
        let text = snapshot.value["text"] as! String
    
        // 4
        self.addMessage(id, text: text)
    
        // 5
        self.finishReceivingMessage()
      }**
    

    这是一个很好的教程 https://www.raywenderlich.com/122148/firebase-tutorial-real-time-chat

    如果你想让它在 Objective-C 中转换,那么我当然会帮你

    【讨论】:

    • 谢谢 shafi,我目前被卡住的原因是因为我已经从 swift 翻译了。我在底部的描述中突出显示了 swift 代码的外观
    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2017-04-17
    • 2023-04-03
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多