Хотя другие ответы, как правило, правильные о том, как предотвратить сбой вашего кода, они не объясняют почему вы получаете cra * sh, потому что ваша переменная равна нулю.
Здесь происходит то, что код перебирает все документы, содержащиеся в снимке
for allDocument in snapshot.documents {
, и следующая строка пытается прочитать поле под названием «Заголовок мотивации» в каждом документе. То как? сообщает вашему коду, что если поле не существует, присвойте переменной var dailymotivationTitle значение nil (? означает, что он необязательный; он может существовать или не существовать)
let dailymotivationTitle = data["Motivation title"] as? String
, а вот пример то, как может выглядеть ваша структура, может привести к тому, что cra sh:
document_0
Motivation title = "Some title"
motivation scripture "Some scripture"
document_1
Motivation title = "Some title"
motivation scripture "Some scripture"
document_2
Motivation Title = "Some title"
motivation scripture "Some scripture"
все go будет хорошо при чтении document_0 и document_1, но обратите внимание, что document_2 случайно имеет немного другое имя поля: Мотивация Title (обратите внимание на заглавную букву T в заголовке), и это не то, что ожидает приложение. Таким образом, переменная dailymotivationTitle имеет значение nil, как упомянуто выше.
В дальнейшем это поле может вообще не существовать в одном документе в структуре, что является тем же результатом; nil var.
Тогда эта строка является виновником, потому что она разворачивает этот необязательный var с!
let newthought = RealMotivatioNDataModel(Realmotivation: dailymotivationTitle!
The! следуя за dailymotivationTitle var, ваш код сообщает, что вы ГАРАНТИРУЕТЕ, что оно не будет равно нулю. Но ... это было ... так что это дает сбой.
Так что прыгайте в консоль Firebase и просматривайте структуру - вы обнаружите, что либо в одном документе есть поле, написанное по-другому, либо это поле полностью отсутствует (или что-то еще, но это с чего начать)