私はユーザーが参加しているチャットのtableViewを作成しようとしています。彼らのサイトでfirebaseのチュートリアルに従っていて、彼らはチャットルームのリストを簡単に取得して、ユーザーが子供を作り、その子供に部屋の名前を追加することになったと言っていました。 SwiftとFirebaseがデータベースを照会しています
は、だから私の構造は、このUsers
UNIQUE KEY
nickname: "name"
rooms
name: true
Room
etc etc
のようにだから私のcellForRowに私は
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
firebase.child("users").child(fUID).observeSingleEvent(of: .value, with: { snapshot in
for user in snapshot.children.allObjects as! [FIRDataSnapshot]{
self.names = (user.value?["participating"] as? String)!
}
})
cell.textLabel?.text = self.names
cell.detailTextLabel?.text = "test"
return cell
}
が、私はエラーを取得し、このコードを使用して見えるI PO名前は空の文字列
を起動したとき誰かが私に何が間違っていて、それをどう修正するのか理解できますか?私は部分的に今
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let ref = firebase.child("users").child(fUID).child("participating")
ref.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot.value)
var dict = [String: Bool]()
dict = snapshot.value as! Dictionary
for (key, _) in dict {
self.names = key
print(self.names)
}
self.rooms.append(self.names)
self.tableView.reloadData()
})
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.rooms.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = self.rooms[indexPath.row]
cell.detailTextLabel?.text = "test"
return cell
}
問題を動作するようにコードを得ている
EDIT 1
はfirebase中2つの項目があるということです...そして、それは一つだけを示しているありがとうそのうちの
私はcellForRowAtIndexPath以外の配列全体を観察します。たとえば、viewDidAppearにあります。その後、一度フェッチからのアイテムを持っていれば、テーブルビューをリロードします。 – DogCoffee
私の問題は、self.names ...という行にあります。エラーEXC_BAD_Instruction .... – RubberDucky4444
あなたが作っているfirebaseの呼び出しはコールバックにあります。あなたの設定は間違っています。 firebase呼び出しを、私が上で述べたところに移動し、そのデリゲートメソッド内に移動しないでください。 – DogCoffee