奇怪的 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
您会发现它们的顺序正确。
我正在尝试通过延迟加载实现一个呈现 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
您会发现它们的顺序正确。