奇怪的 Firebase IOS queryStartingAtValue returns 错误的顺序

strange Firebase IOS queryStartingAtValue returns wrong order

我正在尝试通过延迟加载实现一个呈现 posts 的集合视图,一次只加载 15 posts,我将最后下载的 post 保存在变量 lastPostID 并将其传递给方法 queryStartingAtValue 但是当我得到结果时, snapshot.value 被正确排序但是当我写下这一行时:

NSDictionary *retrivedData = snapshot.value;

retrivedData 词典被弄乱了,顺序也错了。正因为如此,我对每个不同的查询都会得到相同的结果,因为 lastPostID 总是相同的

那是我的查询代码:

  FIRDatabaseReference *dbRef = [[[[FIRDatabase database]reference] child:POSTS_FOR_CHALLENGES] child:challengeID];    
    [[[[dbRef queryOrderedByKey]  queryStartingAtValue:lastPostID] queryLimitedToFirst:15] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
            //sort the keys of the dictionary/json alphabetically
            NSMutableDictionary *posts = snapshot.value;
            if(sortedValues.count > 0)
            {

                lastPostID = [snapshot.value allKeys].lastObject
            }
            [connector postsForChallengeRetrived:posts];

        }];

我设法通过在客户端对 retrivedData 的键进行排序来解决它,但这不是一个好的解决方案,有什么想法吗?

snapshot 包含排序的结果。但是,当您请求 snapshot.value 时,它会将结果转换为一个本质上是无序的字典。

因此,无需立即转换为字典,loop over snapshot.children 您会发现它们的顺序正确。