Firebase 数据排序

Firebase Data Sorting

我无法弄清楚为什么我的数据无法排序,我已经通读了 Firebase 数据排序并应用了如下所示的查询过滤器,但我的数据排序不正确。

我希望根据数据写入 firebase 的时间对数据进行排序,据我所知,我可以根据 ChildAutoID 键进行排序。所以我正在使用 queryOrderedByKey。它以相反的顺序对数据进行排序,最近的数据位于我的 UITableView 的底部。

请帮忙!

这是 Firebase 中的数据结构,非常基础。

-(void)loadDataFromFirebase
{
    NSLog(@"LOAD DATA");
    [self removeObservers:self];
    Firebase* listRef = [[Firebase alloc] initWithUrl:@"firebaseurl/feed"];
    [[listRef queryOrderedByKey] observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot)
     {

         NSDictionary *refNum = @{
                                  @"ref" : snapshot.ref
                                  };

         [self.objectData addObject:snapshot.value];
         [self.refData addObject:refNum];
         [self.myTable reloadData];
    }];

    [listRef observeEventType:FEventTypeChildRemoved withBlock:^(FDataSnapshot *snapshot)
     {
         [self loadDataFromFirebase];

     }];
}

另一种选择是从 Firebase 加载所有节点 children,将它们插入数组,然后对数组进行排序。最后更新表视图。在上面发布的代码中,如果节点中有 1000 children,tableView 将刷新 1000 次(每个 child 刷​​新一次),这可能是不必要的。 (下面的代码未经测试,就在我的脑海中)。

[firebaseNode observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {

    for ( FDataSnapshot *child in snapshot.children) {

          NSDictionary *dict = child.value; //or craft an object instead of dict

          [self.myMutableArray addObject:dict];
    }

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]; //sort by date key, descending
    NSArray *arrayOfDescriptors = [NSArray arrayWithObject:sortDescriptor];

    [self.myMutableArray sortUsingDescriptors: arrayOfDescriptors];

    [self.tableView reloadData];    

}];

您还可以在for循环中过滤返回的内容,只向数组中添加您感兴趣的项目。这很大程度上取决于正在处理的child人的数量。