異なるテーブルビューのセルに配置したいチーム名の配列を読み込もうとしましたが、Firebaseから再帰を使用してロードしようとするとエラーが発生する
私は、値が戻ってくるまでプログラムを待たせようとしていますが、常にクラッシュしたり、読み込みエラーを取得したり、フリーズしたりするので、何も得られないようです。
var ref: FIRDatabaseReference?
var teamData = [String]()
var teamCount : Int?
var hasfilled = false
var firstRun = false
var currentUser = FIRAuth.auth()?.currentUser
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
ref = FIRDatabase.database().reference()
//Load each team
let path = ref?.child("Users").child(currentUser!.uid).child("joinedTeams")
path?.observeSingleEvent(of: .value, with: { (snapshot) in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot{
let teamName = rest.value as? String
if let teamNameData = teamName {
self.teamData.append(teamNameData)
}
}
self.teamCount = Int(snapshot.childrenCount)
})
if runTillCompletion() == true {
self.tableView.reloadData()
}
}
func runTillCompletion() -> Bool{
if self.teamCount == self.teamData.count {
return true
}
return runTillCompletion()
}
私はこれをいくつかの方法で試しました。whileループからちょうどトンを読み込んでいます。
ビューを再読み込みして、セルのセル数/コンテンツ数を決定するテーブルビューメソッドを実行します。
whileループ/再帰関数を使用すると厄介な問題が発生しているので、これを行うにはより良い方法があると確信しています。
ありがとうございます!
これを試しました。それは凍結せずにテーブルビューにセグを管理するが、それは何もロードされませんクラッシュします。私は観測の最後にブレークポイントを置いて、self.teamCountとself.teamDataの両方が空です。 –
観測終了時にはどういう意味ですか? 'observeSingleEvent(of:...、with:'ブロック内にブレークポイントを置く必要があります。あなたの質問に 'UITableViewDataSource'メソッドを追加してください – Callam