Firebase排序查询提供(未排序的)字典结果

时间:2016-05-23 22:56:09

标签: ios firebase firebase-realtime-database

所以我确定我在这里遗漏了一些东西,但是当我想对某个游戏中的前10个分数进行查询时,Firebase会返回前10个分数,但是因为它们会回馈作为字典(使用childByAutoId生成的密钥),当在客户端收到它们时,它们是“未排序的”(因此要显示前10个,你必须再次对它们进行排序)......

FIRDatabaseReference *ref = [[FIRDatabase database] reference];
FIRDatabaseQuery *jungleHighscoresQuery = [[[ref child:@"jungleScores"] queryOrderedByChild:@"score"] queryLimitedToLast:4];
[jungleHighscoresQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot){
    NSDictionary *postDict = snapshot.value;


    NSLog(@"%@", postDict);
}];

上面的代码给出了以下输出(这些是数据库中~20之间的前4个分数):

    {
    "-KIUhe_9TLQoy_zNbJT0" =     {
        score = 290;
        userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
    };
    "-KIUj8VUyNMgyZ135dI_" =     {
        score = 560;
        userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
    };
    "-KIUjK15Gy9PRB_JBWOA" =     {
        score = 240;
        userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
    };
    "-KIUlZ1a03r7bjPYNueG" =     {
        score = 740;
        userid = oMqoPGJYsGWHffYx8N6vDk3Osh72;
    };
}

我知道再次对它进行排序是一件容易的事,但这似乎很奇怪。

1 个答案:

答案 0 :(得分:3)

毕竟有一个简单的解决方案,只需要抓住枚举器而不是字典:

 NSEnumerator *enumerator = snapshot.children;

然后使用[enumerator nextObject]

进行迭代