「FIRESTORE内部アサーションに失敗しました:無効なドキュメント参照。ドキュメント参照には偶数のセグメントが必要ですが、NewGameには1インチがあります

Aug 18 2020

私は迅速なプログラミングに取り組んでいますが、アプリを実行するたびに突然クラッシュし始めます。私が受け取ったエラーメッセージは

スレッド1:例外:「FIRESTORE内部アサーションに失敗しました:無効なドキュメント参照。ドキュメント参照には偶数のセグメントが必要ですが、NewGameには1があります」

エラーを検索したところ、dbに複数のコレクションとドキュメントがあると、発生する傾向があると言われています。しかし、私のデータベースは本当にシンプルです。2つのコレクションだけで、その中にドキュメントがあります。この画像のように。

バーボタンをタップすると、アプリがクラッシュします。これがこのコード行です。

@IBAction func addPressed(_ sender: UIBarButtonItem) {
    
    performSegue(withIdentifier: K.homeToGameScreen, sender: self)
    
    // create new game array in db & 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 DougStevenson Aug 18 2020 at 19:04

問題は、ほぼ確実に、self.docId使用時に文字列がnilまたは空であるため、DocumentReferenceを構築しているコードのパスセグメントを作成できないことです。どのように割り当てたのか、どこで定義されているのかさえわからないため、これをデバッグして、期待する値がない理由を理解する必要があります。