Firestore Thread 1: Неустранимая ошибка при загрузке данных в просмотр таблицы с использованием прослушивателя в реальном времени (Swift 4) - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь создать приложение для управления финансами, и мне нужно отобразить все транзакции в виде таблицы.Приложение работало нормально, пока я не обновил Pod (я не касался этого проекта с прошлого Рождества, просто вернулся к нему).Итак, теперь я столкнулся с темой «Поток 1: неустранимая ошибка: неожиданно обнаружил ноль при развертывании необязательного значения».

Я попытался изменить свою «структуру», но это не помогло.

Это функция в моем табличном представлении:

func checkUpdates() {
    reference(to: .transactions).whereField("timeStamp", isGreaterThan: Date()).addSnapshotListener { (querySnapshot, error) in
        guard let snapshot = querySnapshot else { return }
        snapshot.documentChanges.forEach {
            diff in
            if diff.type == .added {
                self.transactionArray.append(transactionStruct(dictionary: diff.document.data())!)
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
        }
    }
}

Я получаю сообщение об ошибке потока 1 в строке 7, где написано "self.transactionArray.append ..."

Это нижедля структуры:

protocol DocumentSerializable {
    init?(dictionary:[String: Any])
}

struct transactionStruct {
    var description: String
    var amount: Int
    var timeStamp: Date
    var dictionary: [String: Any] {
        return ["description": description,
                "amount": amount,
                "timeStamp": timeStamp]
    }
}

extension transactionStruct: DocumentSerializable {
    init?(dictionary: [String: Any]) {
        guard let amount = dictionary["amount"] as? Int,
            let description = dictionary["description"] as? String,
            let timeStamp = dictionary["timeStamp"] as? Date else { return nil }

        self.init(description: description, amount: amount, timeStamp: timeStamp)
    }
}

Теперь, после того как я добавлю новую запись, приложение будет аварийно завершать работу, и я получаю этот поток 1: фатальная ошибка каждый раз.Почему это происходит?

1 Ответ

0 голосов
/ 02 февраля 2019

Любой восклицательный знак является кандидатом на сбой приложения.

Инициализатор в расширении TransactionStruct - укажите имя с начальной заглавной буквой - невозможно, поэтому используйте дополнительную привязку длябезопасное развертывание

if diff.type == .added, let transaction = TransactionStruct(dictionary: diff.document.data()) {
    self.transactionArray.append(transaction)
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

Если ничего не происходит, то переданный словарь изменился.

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