tableViewのデータをスライドして削除する機能を実装しております。
Firestore内のデータも同時に削除したいと思い、下記ソースコードのように特定のdocumentIdのデータを削除しようとしているのですが、「memos[indexPath.row].documentId」のdocumentIdに赤線がつき、下記エラーが発生してしまいました。
error
1Thread 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
1 2// データベースへの参照を定義 3 let data = Firestore.firestore() 4 data.collection("memos").getDocuments { [self] (snap, err) in 5 if let err = err { 6 print("Error getting documents: \(err)") 7 return 8 } else { 9 for document in snap!.documents { 10 let data = document.data() 11 12 ↓ドキュメントIdをメモクラスの初期化処理に設定 13 let memo = Memo.init(dic: data, documentId: document.documentID) 14 15 // メモの配列に追加 16 self.memos.append(memo) 17 } 18 } 19 self.tableView.reloadData() 20 }
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 } }
回答1件
あなたの回答
tips
プレビュー