我正在尝试快速从后端数据库接收数据。代码抛出一个致命错误:unwrapping an Optional value 时意外发现 nil。
func findPlayersByPosition(position: String) -> [Player] {
let whereClause = "category = '\(position)'"
let dataQuery = BackendlessDataQuery()
dataQuery.whereClause = whereClause
var error: Fault?
let players = Backendless.sharedInstance().data.of(Player.ofClass()).find(dataQuery, fault: &error)
if error == nil {
print("Contacts have been found: \(players.data)") // **Fatal error is thrown on this line**
}
else {
print("Server reported an error: \(error)")
}
var playerDB = players.data as! [Player]
return playerDB
}
“玩家”确实包含数据,所以我认为可能会出现此错误,因为我正在使用同步方法来检索调用 print(players.data) 时尚未完成的玩家。如果我错了,请纠正我。
所以我想使用异步方法来查看是否可以解决错误。我一直在挖掘后端文档,其中解释了如何进行异步调用:
func find(_ dataQuery: BackendlessDataQuery!, responder responder: IResponder!) -> Void
但是我仍然不明白如何将此方法应用于我自己的代码?非常感谢帮助。
更新的问题
感谢您到目前为止的答案。我发现当我从 viewdidload() 内部调用该函数时,它工作正常。但是,当我在视图控制器中使用所需的 init 方法调用该函数时,如下所示:
required init?(coder aDecoder: NSCoder) {
do {
let players = findPlayersByPosition("GK")
} catch let error {
fatalError("\(error)")
}
super.init(coder: aDecoder)
}
然后玩家仍然是零
Q1:为什么这在所需的 init() 中不起作用?