Ios 如何在阵列中存储Firebase数据并将其打印出来?

Ios 如何在阵列中存储Firebase数据并将其打印出来?,ios,firebase,firebase-realtime-database,Ios,Firebase,Firebase Realtime Database,我一直试图将firebase数据存储到一个数组中,然后整天打印出来,但没有用。我会非常感谢社区的帮助 下图显示了当前firebase数据库的外观: - (void)readDataFromServer { _ref = [[FIRDatabase database] reference]; _hotelRef = [_ref child:@"hotel bookings"]; NSString *userID = [FIRAuth auth].currentUser.uid; FIRDa

我一直试图将firebase数据存储到一个数组中,然后整天打印出来,但没有用。我会非常感谢社区的帮助

下图显示了当前firebase数据库的外观:

- (void)readDataFromServer {

_ref = [[FIRDatabase database] reference];

_hotelRef = [_ref child:@"hotel bookings"];

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

FIRDatabaseQuery *userHotelBookingsQuery = [[_hotelRef child:userID] queryOrderedByChild:@"number"];

[userHotelBookingsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if (snapshot.value == [NSNull null]) {

        NSLog(@"No messages");

    } else {

    [self.arrayOfBookingDetail removeAllObjects];

    self.arrayOfBookingDetail = (snapshot.value);

    NSString *firstMessage = [self.arrayOfBookingDetail objectAtIndex:0];

    NSLog(@"First message is: %@", firstMessage);

    }


 }];

}

下面是从firebase读取数据的函数的代码:

- (void)readDataFromServer {

_ref = [[FIRDatabase database] reference];

_hotelRef = [_ref child:@"hotel bookings"];

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

FIRDatabaseQuery *userHotelBookingsQuery = [[_hotelRef child:userID] queryOrderedByChild:@"number"];

[userHotelBookingsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if (snapshot.value == [NSNull null]) {

        NSLog(@"No messages");

    } else {

    [self.arrayOfBookingDetail removeAllObjects];

    self.arrayOfBookingDetail = (snapshot.value);

    NSString *firstMessage = [self.arrayOfBookingDetail objectAtIndex:0];

    NSLog(@"First message is: %@", firstMessage);

    }


 }];

}

您的代码失败,因为您正在通过用户
uid
获取子项,而该用户实际上并不存在。
K2xxxxxxxx
是每个元素的唯一字符串,与用户id不对应。请尝试此操作

_ref = [[FIRDatabase database] reference];

_hotelRef = [_ref child:@"hotel bookings"];

FIRDatabaseQuery *userHotelBookingsQuery = [_hotelRef queryOrderedByChild:@"number"];

[userHotelBookingsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if (snapshot.value == [NSNull null]) {
        NSLog(@"No messages");
    } else {
      //[self.arrayOfBookingDetail removeAllObjects];
      //self.arrayOfBookingDetail = (snapshot.children);
      //NSString *firstMessage = [self.arrayOfBookingDetail objectAtIndex:0];
      //NSLog(@"First message is: %@", firstMessage);
      NSDictionary *allUsersData = (NSDictionary*)snapshot.value;
      for (NSString *key in allUsersData.allKeys) {
           NSLog("@key is %@, data is %@",key,allUsersData[key]);
      }
    }

 }];

}
编辑:

要查询特定用户,请将查询更改为

 FIRDatabaseQuery *userHotelBookingsQuery = [[_hotelRef queryOrderedByChild:@"userID"] queryEqualToValue:@"GEmxxxxxxxxx"];

在问题中添加代码,而不是图像!你想读数据还是写数据????您的函数是关于读取数据。。。所以你想要的基本策略是,我不知道社区更喜欢实际代码而不是图像。我会做改变。我想读取数据,插入数组并显示它们。我明白了。在上面的数据库图像中,它显示了不同用户预订的酒店列表。我想查询特定用户的所有酒店预订。我尝试运行您提供的代码,NSLog返回“第一条消息是:Null”。我不知道为什么。谢谢。在我的逻辑流程中,我不知道哪个用户将登录。这就是为什么我使用NSString*userID=[FIRAuth auth].currentUser.uid;要检索当前登录用户,请返回他/她的酒店预订记录。是否未获取该记录?请解释更多。我认为在中硬编码用户ID@“gemxxxxxxxxx”是不明智的。