2016-08-19 37 views
2

希望有人能够帮助我了解Firebase快照和排序。为什么如果您在FirebaseDBRef上查询orrderedByChild,则snapshot.value将返回到Firebase数据库(使用浏览器)显示的结果,但如果您执行for snap in snapshot.children{},则值显示排序。只是想澄清为什么发生这种情况。对snapshot.value的Firebase排序澄清

让我来举例说明。

let dinoRef = rootRef.child("dino") 
let query = dinoRef.queryOrderedByChild("dimensions/height") 
query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
     // This prints to the console unsorted 
     print(snapshot.value) 

     // This prints to console sorted 
     for snap in snapshot.children { 
      print(snap) 
     } 
    }) 

谢谢。

回答

3

A FIRDataSnapshot包含有关返回数据的键,与这些键相关的值和键的顺序的信息。当您致电snapshot.children快照时,枚举器将按您请求的顺序返回子项。

当您在快照上调用snapshot.value时,它必须将所有信息转换为NSDictionary。字典没有关于数据顺序的固有信息,因此结果的顺序在此处丢失。

0

您必须按升序和降序选项尝试按小孩排序。这将澄清你的疑问。

+0

嗨,没有升序或降序选项。根据Firebase文档排序已经升序且仅升序。 ---- https://firebase.google.com/docs/database/ios/retrieve-data#data_order。即使有一个asc或desc选项,您的评论也没有说明我的问题。如果我打印snapshot.value结果未排序,如果我打印每个Snapshot.children结果是排序。 – sweepez