如何访问Firebase中具有唯一ID的特定子项?

时间:2016-06-08 20:32:08

标签: ios objective-c firebase

我是使用Firebase的新手。我正在构建一个iOS应用程序,我很困惑如何从数据库中检索值以及如何使我的数据库实时。

有一个特定的情况,我不知道如何解决。在我当前的应用程序中,我可以创建笔记并将其存储在Firebase数据库中。这些注释显示在tableView中。单击其中一个单元格时,可以修改注释。每个笔记都包含标题,日期和消息。所以当你想要更新笔记时。如何跟踪正在更新的注释,以便我可以创建从Firebase调用正确子项的正确路径?

我正在使用updateChildValues函数。

这就是我的JSON的样子:

Notes
    |
    a7Uzr64jhBNpEbCkOufUNRxHeZv1   (userID)
          | 
          -KJlc7cqlBUEvWGjhfnj     (messageID)
              |
              date: "Jun 8, 2016, 2:07 PM"
              message: "Testing notes! "
              title: "front_raises"
          -KJlbzmYVDKTiRUmxVsAaddclose
              |
              date: "Jun 8, 2016, 2:06 PM"
              message: "Recovering! "
              title: "batter_on_deck"}

因此JSON树以Notes开头,然后它有一个子节点,它是每个用户的唯一ID。然后是消息唯一ID,其中包含注释的日期,消息和标题。

所以,如果我想检索并更新第二个事件的值,我该怎么办呢?

每封邮件都有唯一的ID。我正在使用ChildAutoID。因此,我想知道,如果我保存了多条消息,并且我想更新其中一条消息,我该如何从Firebase检索该特定消息?

现在我有这个,但我不想传递那个特定的uniqueid字符串。我想传递一个变量,该变量将包含我想要修改的当前消息的uniqueId。

 [[[_dbReference child:_current_user.uid] child:@"-KJglUt2UguG8jw5Jp_K"] setValue:@{@"title": newData[1], @"date": newData[2], @"message": newData[0]}];

第一个孩子是current_user_uid。第二个孩子,我正在使用ChildAutoID创建的uniqueID。 那么我怎样才能获得那个uniqueID,这样当我从Firebase中检索时,我可以使用该值来引用孩子并获得我想要的消息?

以下是我保存邮件的方式:

- (IBAction)saveMessageButton:(id)sender {

  if([_messageTextView.text isEqualToString:@""]){
  _messageTextView.text = @"empty message";
  }
  if([_messageNameTextField.text isEqualToString:@""]){
    _messageNameTextField.text = @"No name";
  }
    NSDate *now = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSString *message = [self.messageTextView.text stringByAppendingString:@"%%"];
    message = [message stringByAppendingString:self.messageNameTextField.text];
    message = [message stringByAppendingString:@"%%"];
    message = [message stringByAppendingString:[dateFormatter stringFromDate:now]];

    // ******** Firebase ************ //
    NSArray *newMessage = [message componentsSeparatedByString:@"%%"];

    //creates a unique ID for every new message created
    NSString *key = [[_dbReference child:@"Messages"] childByAutoId].key;


    NSDictionary *theMessage = @{@"title": newMessage[1],
                                 @"date": newMessage[2],
                                 @"message": newMessage[0]
                                };

    NSString *newPath = @"/";
    newPath = [newPath stringByAppendingString:_current_user.uid];
    newPath = [newPath stringByAppendingString:@"/"];

    NSString *path = [newPath stringByAppendingString:key];
    NSDictionary *addingMessage = @{path: theMessage };

    [_dbReference updateChildValues:addingMessage];

    // ********End of Firebase ********* //

    NSString *messages = [userDefaults valueForKey:@"messages"];

    // If this is the first message saved
    if(messages == nil || [messages isEqualToString:@""]){
        messages = message;
    }
    else{
        messages = [messages stringByAppendingString:@"^^"];
        messages = [messages stringByAppendingString:message];
    }
    [userDefaults setObject:messages forKey:@"messages"];
    [self.navigationController popViewControllerAnimated:YES];
}

0 个答案:

没有答案