«ОШИБКА ВНУТРЕННЕГО УТВЕРЖДЕНИЯ FIRESTORE: неверная ссылка на документ. Ссылки на документы должны содержать четное количество сегментов, но NewGame имеет 1»

#swift #firebase #google-cloud-firestore

#swift #firebase #google-облако-firestore

Вопрос:

Я работаю над программированием на swift, но каждый раз, когда я запускаю свое приложение, оно внезапно начинает сбоить. Сообщение об ошибке, которое я получил, было

Поток 1: Исключение: «ОШИБКА ВНУТРЕННЕГО УТВЕРЖДЕНИЯ FIRESTORE: неверная ссылка на документ. Ссылки на документы должны содержать четное количество сегментов, но NewGame имеет 1»

Я искал ошибку, и люди говорят, что если у меня есть несколько коллекций и документов в db, это имеет тенденцию происходить. Но моя база данных действительно проста. только две коллекции, и внутри них у меня есть документы. Нравится это изображение. изображение базы данных

Когда я нажимаю кнопку bar, приложение завершает работу, которая представляет собой эти строки кода.

 @IBAction func addPressed(_ sender: UIBarButtonItem) {
    
    performSegue(withIdentifier: K.homeToGameScreen, sender: self)
    
    // create new game array in db amp; player's ready status -> true
    
    db.collection(K.FStore.newGameCollection)
        .addDocument(data: [K.FStore.gameBoardField: GameBoard.gameBoard, K.FStore.player1Field: playerInfo[K.FStore.nameField]!, K.FStore.player2Field: K.FStore.player2Field, K.FStore.uID: playerInfo[K.FStore.uID]!]) { (err) in
            
            if let err = err {
                print("Error getting documents3: (err)")
            } else {
                
                self.db.collection(K.FStore.playersCollection).document(self.docId).updateData([K.FStore.isReadyField: true]){ err in
                    if let err = err {
                        print("Error updating player's isReady status: (err)")
                    } else {
                        print("Document successfully updated")
                    }
                }
            }
    }
}
  

приведенный выше код находится в чем-то, что называется HomeViewController, но я всегда получаю ошибку в файле AppDelegate.swift.

Кто-нибудь, пожалуйста, может сказать мне, что здесь происходит и как это исправить, пожалуйста?

Комментарии:

1. Вы вообще нашли выход?

Ответ №1:

Проблема почти наверняка в том, что self.docId на момент его использования это nil или пустая строка, что не позволяет создать сегмент пути для кода, который создает DocumentReference . Мы не можем видеть, как вы его назначили или даже где оно определено, поэтому вам придется отладить это и выяснить, почему оно не имеет ожидаемого значения.

Комментарии:

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