Here's my code: I've also tried messing with the rules of the data but to no avail. The data keeps getting returned completely randomly, in terms of the "time" values (as well as other values I've looked at).
let path = // Path to messages (/message/<conversationId>/)
let msgRef = // Reference to messages
msgRef.child(id)
.queryOrdered(byChild: "time")
.observe(FIRDataEventType.value, with: { (snapshot) in
let data = JSON(snapshot.value ?? [])
var messages = [Message]()
for msg in data {
let holder = Message(data: msg.1)
messages.append(holder)
print("key: \(msg.0) time: \(holder.getTime())")
}
// then returns results via completion block
// The right way:
let data = snapshot.children
var messages = [Message]()
for msg in data.allObjects as! [FIRDataSnapshot] {
let thisMsgData = JSON(msg.value ?? [])
let holder = Message(data: thisMsgData)
messages.append(holder)
print("key: \(msg.key) time: \(holder.getTime())")
}
})
}
Here is how my data is structured:
message: {
conversationId: {
msgId: {
// the rest of the message data
"time": 20170210051745 <-- as an Int
// format of date: yyyyMMddHHmmss
}
}
}