tableViewのデータをスライドして削除する機能を実装しております。
Firestore内のデータも同時に削除したいと思い、下記ソースコードのように特定のdocumentIdのデータを削除しようとしているのですが、「memos[indexPath.row].documentId」のdocumentIdに赤線がつき、下記エラーが発生してしまいました。
error
Thread 1: Fatal error: Index out of rang
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { memos.remove(at: indexPath.row) ↓こちらでエラーが発生しています Firestore.firestore().collection("memos").document(memos[indexPath.row].documentId).delete() { err in if let err = err { print("Error removing document: \(err)") } else { print("Document successfully removed!") } } tableView.deleteRows(at: [indexPath], with: .fade) } }
このエラー自体、想定される配列の要素数を超えたときに表示されるエラーと認識しているのですが、今回はdocumentIdを取得しようとしているだけなので、このエラーが発生している原因が分かりません。解決方法をご教示いただけませんでしょうかm(_ _)m
※念の為、documentIdの設定箇所のソースコードも添付いたします。
viewController
// データベースへの参照を定義 let data = Firestore.firestore() data.collection("memos").getDocuments { [self] (snap, err) in if let err = err { print("Error getting documents: \(err)") return } else { for document in snap!.documents { let data = document.data() ↓ドキュメントIdをメモクラスの初期化処理に設定 let memo = Memo.init(dic: data, documentId: document.documentID) // メモの配列に追加 self.memos.append(memo) } } self.tableView.reloadData() }
struct Memo { var name: String = "" var text: String = "" var documentId: String = "" init(dic: [String: Any], documentId: String){ self.name = dic["name"] as! String self.text = dic["text"] as! String self.documentId = documentId } }
まだ回答がついていません
会員登録して回答してみよう