知りたいこと
選択されたtableViewCellに表示されているfirestoreデータのdocumentIDを取得する方法を知りたいです。
やろうとしていることの全体像
選択したtableViewcellを"delete"ボタンをタップして削除したいので、
"delete"ボタンをタップ
→ 選択しているセルのindexPathを取得
→ 取得したindexPathに格納しているfirebaseのfirestoreデータを削除
→ tableViewをリロード
という流れで行おうと考えております。
現状
「取得したindexPathに格納しているfirebaseのfirestoreデータを削除」の段階のデータを削除する時に、documentIDを指定しなければならないようで ( https://firebase.google.com/docs/firestore/manage-data/delete-data?hl=ja )、そのIDの取得方法がわからず詰まっています。
swift
1@IBAction func tapDeleteButton(_ sender: Any) { //check mark がついているセルを削除 2 3 //選択されているセルのindexPath.rowを取得 4 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 5 let selectedCell = tableView.cellForRow(at: indexPath) 6 7 // (削除する)選択されたセルに入っているdraftDataのdocumentIDを取得 8 let documents = documentsnapshot.documents //ここでエラー 9 for i in 0 ..< documents.count { 10 let dictData = documents[i].data() 11 let documentID = documents[i].documentID 12 print("Document ID (documentID)") 13 } 14 15 // forestoreの方のデータを削除 ("DC"は公式のをコピペしたままのものです。) 16 db.collection("drafts").document("DC").delete() { err in 17 if let err = err { 18 print("Error removing document: (err)") 19 } else { 20 print("Document successfully removed!") 21 } 22 } 23 } 24 // tableview(draftData)をリロード 25 self.tableView.reloadData() 26 }
エラーコード
Use of unresolved identifier 'documentsnapshot'; did you mean 'DocumentSnapshot'?
documentIDは、自動生成の.addメソッドを使用しています。
https://firebase.google.com/docs/firestore/manage-data/add-data
データの取得は、tableViewCellに表示させる前にtimestampで上から新着順に表示するようにしています。
swift
1func getDraftsData() { 2 guard let uid = user?.uid else { return } 3 db.collection("drafts").whereField("uid", isEqualTo: uid).getDocuments() { (querysnapshot, err) in 4 if let err = err { 5 print("error getting documents: (err)") 6 } else { 7 let personalDraftData = querysnapshot!.documents.sorted {personalDraftData,provisionalDraftData in 8 guard let personalDraftsData = personalDraftData.data()["timestamp"] as? Timestamp, 9 let provisionalDraftsData = provisionalDraftData.data()["timestamp"] as? Timestamp else { return false } 10 return (personalDraftsData.dateValue() > provisionalDraftsData.dateValue()) 11 } 12 self.draftData = personalDraftData 13 self.tableView.reloadData() 14 } 15 } 16 }
どのようにしたらdocumentIDを取得できるか教えていただきたいです。
よろしくお願いします。
補足
ご回答いただきました内容にコードを書き換えて実行した結果です。
設定したブレイクポイントではブレイクしてくれず、ボタンアクションが完了した最後の "}" でブレイクされます。
また、シミュレータの動きとしては、delete ボタンタップ後は選択されていたセルのチェックマークが外れるだけで、firestoreのコンソール内のデータを確認しても削除されておりません。