Когда я запускаю SnapshotListener и помещаю новые данные в локальный массив, я получаю сообщение «Неожиданно найдено nil при развертывании необязательного значения» - PullRequest
0 голосов
/ 03 ноября 2019

Я создаю приложение для напоминания, которое синхронизируется с облаком с помощью базы данных 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!")
                    }

                }

            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...