我有正常的 firebase 获取数据方法,但是在附加数据并从快照函数调用该函数后,我的应用程序崩溃了,但是当它在快照函数内部时,该过程成功了,这是我的代码:
var randumUserKey: String = ""
var counterKey: Int = 0
var counter = 0
var keys = [String]()
Database.database().reference().child("posts").observe(.value, with: { (snapshot) in
for a in ((snapshot.value as AnyObject).allKeys)!{
self.keys.append(a as! String)
// self.keys2.append(a as! Int)
// print(a)
}
print("KKEeeys")
print(self.keys)
})
func generateNum(){
self.randumUserKey = self.keys[self.counter] //this is the error highlighted in red color in xCode
self.counter += 1
if self.counter == self.keys.count{
self.counter = 0
print("counter == 0 now!")
}
print("the number is \(self.counter)")
}
最佳答案
firebase 函数是一个异步函数。也就是说,当您调用 Database.database().reference().child("posts").observe()
方法时,您正在向 firebase 服务器发送请求以在后台请求数据,然后如果您在服务器调用之后立即调用 generateNum()
,您的 key 中将没有任何内容。服务器请求比运行下一行代码要慢得多。
所以你应该这样使用它
Database.database().reference().child("posts").observe(.value, with: { (snapshot) in
for a in ((snapshot.value as AnyObject).allKeys)!{
self.keys.append(a as! String)
print (a + " added")
}
self.generateNum()
})
关于ios - 错误 : index out of range when retriveing data from firebase snapshot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44740760/