Я создаю приложение для напоминания, которое синхронизируется с облаком с помощью базы данных Firestore Firebase. Я следовал этому учебнику и столкнулся с проблемой в 25:28, когда мы пытаемся соединить данные документа с локальным массивом (с помощью struct / dictionary). Когда я запускаю приложение, оно вылетает, выделяя эту строку, говоря:
Тема 1: Неустранимая ошибка: Неожиданно обнаружен ноль при развертывании необязательного значения
Итак, как сделатьЯ исправлю эту ошибку? Я знаю, что учебник немного стар (сейчас 2 года), но я не могу найти что-нибудь по этому вопросу. Ошибка появляется в функции под названием Проверка обновлений
Вот код, который у меня сейчас есть:
import Foundation
import UIKit
import Firebase
class TableViewController: UITableViewController {
var DocRef: DocumentReference!
var db:Firestore!
var listArray = [ReminderLists]()
var list = [lists]()
var email:String?
var tableuserid:String?
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
email = (Auth.auth().currentUser?.email!)!
tableuserid = Auth.auth().currentUser!.uid
db = Firestore.firestore()
let listsRef = db.collection("users").document(self.tableuserid!).collection("lists")
print("hey")
otherLoadData()
print("Done Loading. Listening...")
checkForUpdates()
}
//MARK: Loading Items
func LoadData(){
//let docRef = db.collection("users").document(self.tableuserid!).collection("lists")
db.collection("users").document("\(self.tableuserid!)").collection("lists")
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
self.listArray = querySnapshot!.documents.compactMap({ReminderLists(dictionary: $0.data())})
DispatchQueue.main.async {
print("Here you go!")
self.tableView.reloadData()
print(self.listArray)
}
}
}
}
}
func checkForUpdates(){
db.collection("users").document("\(self.tableuserid!)").collection("lists").addSnapshotListener {
querySnapshot, error in
guard let collection = querySnapshot else {return}
collection.documentChanges.forEach {
diff in
if diff.type == .added {
if diff.document.data().isEmpty == false {
self.listArray.append(ReminderLists(dictionary: diff.document.data())!)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} else {
print("Documents Were Empty!")
}
}
}
}
}