2016-02-19 1 views
0

Я имею в опции безопасности & правила это:Firebase queryOrderedByChild не заказав по имени в Swift

{ 
"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" 
    } 
} 

Как вы можете видеть, это не упорядоченный по «имени», как и предполагалось. Что я делаю неправильно?

ответ

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") 
    } 
}) 

Если адаптировать этот фрагмент к вашей структуре данных, он будет печатать группы в правильном порядке.

+0

Большое спасибо, Фрэнк, я думал, что .indexOn делает это, когда вы добавляете новый элемент, он добавляет его упорядоченным способом. Теперь это понятно! Я это очень ценю. Кстати, я задал новый вопрос, не могли бы вы проверить его? – Ruben

+1

Если мой ответ был полезен, нажмите стрелку вверху слева от нее. Если он ответил на ваш вопрос, примите его, нажав галочку рядом с ним. Таким образом, другие также знают, что вам помогли, и они могут перейти к следующему вопросу. –

Смежные вопросы