我是使用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];
}