“ FIRESTORE INTERNAL ASSERTION FAILED: การอ้างอิงเอกสารไม่ถูกต้อง การอ้างอิงเอกสารต้องมีจำนวนส่วนคู่ แต่ NewGame มี 1”

Aug 18 2020

ฉันกำลังทำงานเกี่ยวกับการเขียนโปรแกรมอย่างรวดเร็ว แต่ทุกครั้งที่ฉันเรียกใช้แอปมันก็เริ่มหยุดทำงานทันที ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ

เธรด 1: ข้อยกเว้น: "FIRESTORE INTERNAL ASSERTION FAILED: การอ้างอิงเอกสารไม่ถูกต้องการอ้างอิงเอกสารต้องมีจำนวนส่วนเท่ากัน แต่ NewGame มี 1"

ฉันค้นหาข้อผิดพลาดและมีคนพูดว่าฉันมีคอลเล็กชันและเอกสารหลายชุดในฐานข้อมูลมีแนวโน้มที่จะเกิดขึ้น แต่ฐานข้อมูลของฉันง่ายมาก มีเพียงสองคอลเลกชันและฉันมีเอกสารอยู่ข้างใน ชอบภาพนี้.

เมื่อฉันแตะปุ่มแถบแอพจะขัดข้องซึ่งเป็นโค้ดบรรทัดนี้

@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เป็นศูนย์หรือสตริงว่างในขณะที่ใช้งานซึ่งป้องกันไม่ให้สร้างเซ็กเมนต์เส้นทางสำหรับรหัสที่สร้าง DocumentReference เราไม่สามารถดูได้ว่าคุณกำหนดอย่างไรหรือกำหนดไว้ที่ใดดังนั้นคุณจะต้องแก้ไขข้อบกพร่องนี้และหาสาเหตุว่าทำไมจึงไม่มีคุณค่าตามที่คุณคาดหวัง