私は迅速にバックエンドレスデータベースからデータを受信しようとしています。コードはという致命的なエラーをスローします。オプション値をアンラッピングしている間に予期せずnilが見つかりました。Swift Asyncメソッドを使用してバックエンドレスDBからデータを取り出す方法は?
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
}
「選手」のデータを含んでいますので、私は私がプリント(players.data)を呼び出したときにまだ完了していない選手を取得するために、同期メソッドを使用していますので、このエラーが表示されるかもしれないと思います。私が間違っているなら、私を修正してください。
私はそれがエラーを解決するかどうかを確認するために非同期メソッドを使いたいと思います。私は、非同期呼び出しを行う方法を説明していたbackendless documentationを掘りしてきた:
func find(_ dataQuery: BackendlessDataQuery!, responder responder: IResponder!) -> Void
しかし、私はまだ自分のコードにこの方法を適用する方法を理解していませんか?ヘルプは非常に感謝します。質問これまでに答えを
おかげ更新
。 viewdidload()の中から関数を呼び出すと、うまく動作することが分かりました。しかし、私はこのようなのViewControllerで必要なinitメソッドを使用して関数を呼び出すとき:必要なのinit(内からしないのはなぜこの作品):
required init?(coder aDecoder: NSCoder) {
do {
let players = findPlayersByPosition("GK")
} catch let error {
fatalError("\(error)")
}
super.init(coder: aDecoder)
}
その後、選手たちはまだnill
Q1のですか?
は、あなたがブレークポイントでそれをデバッグしようとしたがありますか?コード内に存在する変数の内容は何ですか? – luk2302
私の質問が更新されました。問題:私の関数はviewdidload()から呼び出すと機能しますが、viewcontroller内の必要なinitから呼び出すときは機能しません。どのようなアイデアはなぜですか? – Stijn
同じロジックが適用されます。レイアウト情報はありません。それが純粋な運命であるviewDidLoadから動作するならば、それはすべてのデバイスで動作しません、initロジックまたはdidLoadではなく、それが属する場所にすべてのレイアウトロジックを配置します。 – luk2302