###前提・実現したいこと
【Swift】リアルタイムチャットを実現するFirebaseでCRUD(データ作成、読み込み、更新、削除)をやってみる
を参考にして、Firebaseを使ってデータベースからデータを読み込みたいです。
###発生している問題・エラーメッセージ
swift3
1 //返すセルを決める 2 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 3 //xibとカスタムクラスで作成したCellのインスタンスを作成 4 let cell = table.dequeueReusableCell(withIdentifier: "ListCell") as! ListTableViewCell 5 6 //配列の該当のデータをitemという定数に代入 7 let item = contentArray[indexPath.row] 8 //itemの中身を辞書型に変換 9 let content = item.value as! Dictionary <String, Any> 10 11 print (content) 12 //contentという添字で保存していた投稿内容を表示 13 cell.contentLabel.text = String(describing: content["content"]!) 14 //dateという添字で保存していた投稿時間をtimeという定数に代入 15 let time = content["date"] as! TimeInterval 16 //getDate関数を使って、時間をtimestampから年月日に変換して表示 17 cell.postDateLabel.text = self.getDate(number: time/1000) 18 19 return cell 20 21 }
の
cell.contentLabel.text = String(describing: content["content"]!)
という箇所でbreakして
fatal error: unexpectedly found nil while unwrapping an Optional value
と出てしまいます。
###データのcreate
createはこのように行っています。
func create() { //textFieldになにも書かれてない場合は、その後の処理をしない guard let text = captionField.text else { return } //ロートからログインしているユーザーのIDをchildにしてデータを作成 //childByAutoId()でユーザーIDの下に、IDを自動生成してその中にデータを入れる //setValueでデータを送信する。第一引数に送信したいデータを辞書型で入れる //今回は記入内容と一緒にユーザーIDと時間を入れる //FIRServerValue.timestamp()で現在時間を取る self.ref.child((FIRAuth.auth()?.currentUser?.uid)!).childByAutoId().setValue(["user": (FIRAuth.auth()?.currentUser?.uid)!,"content": text, "date": FIRServerValue.timestamp()]) }
Firebaseのコンソール画面を見てもデータ自体は格納されています。
###試したこと
print (content)
したところ、
["content": 〇〇, "date": 1489649696108, "user": xxxxx]
のように、content自体も返ってきます。
###補足情報(言語/FW/ツール等のバージョンなど)
iOS10
Swift3
Xcode8.2.1
回答1件
あなたの回答
tips
プレビュー