Firebase queryOrderedByChild没有在Swift中按名称排序

时间:2016-02-19 13:41:01

标签: ios json swift firebase

我有安全&规则选项:

{
 "rules": {
 ".read": true,
 ".write": true,
 "groups": {
    ".indexOn": "name"
  } 
 }
}

我的JSON结构是这样的:

{
"groups": {
    "-KAti17inT7GbHEgbzzS": {
        "author": "ruben",
        "name": "C"
   },
   "-KAti36BQGO8sRmfufkE": {
        "author": "ruben",
        "name": "D"
   },
   "-KAti2CVAHtJllQm_m-W": {
        "author": "ruben",
        "name": "A"
   }
}

正如您所看到的,它不是按照“名称”排序的,正如它应该的那样。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

安全规则中的.indexOn指令仅告知数据库在name属性上创建索引。它不会自动重新排序数据。

此外:JSON对象中的键顺序未定义。

要按名称获取您的群组列表,您必须执行Firebase查询。来自Firebase documentation on queries

let ref = Firebase(url:"https://dinosaur-facts.firebaseio.com/dinosaurs")
ref.queryOrderedByChild("height").observeEventType(.ChildAdded, withBlock: { snapshot in
    if let height = snapshot.value["height"] as? Double {
        println("\(snapshot.key) was \(height) meters tall")
    }
})

如果您将此代码段调整为数据结构,则会以正确的顺序打印组。