Unggah data formulir Eureka ke firebase

Saya memiliki profil pengguna yang merupakan tampilan formulir Eureka. Di ruang ini, pengguna dapat memperbarui profilnya. Jika pengguna mengklik 'Simpan', fungsi ini akan dipanggil.

    func saveProfileSettings(){

    let userID = user?.uid
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"

    let PROFILE_DISPLAY_NAME_REF: NameRow? = form.rowBy(tag: Constants.PROFILE_DISPLAY_NAME)
    let PROFILE_DISPLAY_NAME = PROFILE_DISPLAY_NAME_REF?.value

    let PROFILE_EMAIL_REF: EmailRow? = form.rowBy(tag: Constants.PROFILE_EMAIL)
    let PROFILE_EMAIL = PROFILE_EMAIL_REF?.value

    let PROFILE_PHONENUMBER_REF: PhoneRow? = form.rowBy(tag: Constants.PROFILE_PHONENUMBER)
    let PROFILE_PHONENUMBER = PROFILE_PHONENUMBER_REF?.value

    let PROFILE_BIRTH_AGE_REF: DateRow? = form.rowBy(tag: Constants.PROFILE_BIRTH_AGE)
    let PROFILE_BIRTH_AGE_CONVERT = PROFILE_BIRTH_AGE_REF?.value
    let PROFILE_BIRTH_AGE = formatter.string(from: PROFILE_BIRTH_AGE_CONVERT!)
    let PROFILE_BIRTH_AGE_String = String(PROFILE_BIRTH_AGE)

    let PROFILE_GENDER_REF: SegmentedRow<String>! = form.rowBy(tag: Constants.PROFILE_GENDER)
    let PROFILE_GENDER = PROFILE_GENDER_REF.value

    let PROFILE_GENDER_INTEREST_REF: SegmentedRow<String>! = form.rowBy(tag: Constants.PROFILE_GENDER_INTEREST)
    let PROFILE_GENDER_INTEREST = PROFILE_GENDER_INTEREST_REF.value

    let uploadPath = databaseRef.child("profiles").child(userID!)

    let dataBlock = ["\(Constants.PROFILE_DISPLAY_NAME)": PROFILE_DISPLAY_NAME!, "\(Constants.PROFILE_EMAIL)": PROFILE_EMAIL!, "\(Constants.PROFILE_PHONENUMBER)": PROFILE_PHONENUMBER!, "\(Constants.PROFILE_BIRTH_AGE)": PROFILE_BIRTH_AGE_String!, "\(Constants.PROFILE_GENDER)": PROFILE_GENDER!, "\(Constants.PROFILE_GENDER_INTEREST)": PROFILE_GENDER_INTEREST!]

    print("DataBlock \(dataBlock)")

    uploadPath.setValue(dataBlock) { (error, datebaseRef) in
        if error != nil{
            print("Error Occured")
        }
        print("Profile Updated!")
    }



}

Tugas fungsi ini adalah menarik semua data dari formulir, memasukkannya ke dalam array, lalu mengunggahnya ke firebase. Jika pengguna mengklik simpan dan tidak memperbarui informasi apa pun semuanya baik-baik saja namun jika mereka mengedit profilnya dan mengklik simpan, hal itu menyebabkan kesalahan. Lihat di bawah.

assertion failed: Duplicate tag profileDisplayName: file /Users/brandonmayhew/Documents/Programming/X-Code Project's/ChristinaApp/Pods/Eureka/Source/Core/BaseRow.swift, line 172
2017-08-21 12:19:19.258586-0700 ChristinaApp[2615:926887] assertion failed: Duplicate tag profileDisplayName: file /Users/brandonmayhew/Documents/Programming/X-Code Project's/ChristinaApp/Pods/Eureka/Source/Core/BaseRow.swift, line 172

Jika Anda ingin melihat kode apa untuk membuat formulir, ada di 'viewDidLoad' saya

override func viewDidLoad() {
    super.viewDidLoad()

    self.startAnimating(Constants.animationSize, message: "Finding Your Profile", type: .ballZigZag)

    //findImageURL()


    //START

    let userID = user?.uid
    print("Logged in user: \(userID!)")


    databaseRef.child("profiles").child(userID!).observe(.value, with: { (snapshot) in


        let data = snapshot.value as? NSDictionary

        let PROFILE_DISPLAY_NAME = data?[Constants.PROFILE_DISPLAY_NAME] as? String
        let PROFILE_UID = data?[Constants.PROFILE_UID] as? String
        let PROFILE_IMAGE = data?[Constants.PROFILE_IMAGE] as? String
        let PROFILE_EMAIL = data?[Constants.PROFILE_EMAIL] as? String
        let PROFILE_PHONENUMBER = data?[Constants.PROFILE_PHONENUMBER] as? String
        let PROFILE_GENDER = data?[Constants.PROFILE_GENDER] as? String
        let PROFILE_GENDER_INTEREST = data?[Constants.PROFILE_GENDER_INTEREST] as? String
        let PROFILE_BIRTH_AGE = data?[Constants.PROFILE_BIRTH_AGE] as? String
        let PROFILE_LATITUDE = data?[Constants.PROFILE_LATITUDE] as? String
        let PROFILE_lONGITUDE = data?[Constants.PROFILE_lONGITUDE] as? String

        self.form +++ Section("Personal Information")

            <<< NameRow(){ row in

                row.title = "Name"
                row.placeholder = "Enter Name"
                row.value = PROFILE_DISPLAY_NAME
                row.tag = "\(Constants.PROFILE_DISPLAY_NAME)"

                }

            <<< EmailRow(){ row in

                row.title = "Email"
                row.placeholder = "Enter Email"
                row.value = PROFILE_EMAIL
                row.tag = "\(Constants.PROFILE_EMAIL)"

            }

            <<< PhoneRow(){ row in

                row.title = "Phone Number"
                row.placeholder = "Enter Phone Number"
                row.value = PROFILE_PHONENUMBER
                row.tag = "\(Constants.PROFILE_PHONENUMBER)"

            }

            <<< DateRow(){ row in
                row.title = "Your Birth Year"

                //Convert 'PROFILE_BIRTH_AGE' string to NSDATE
                let date = NSDate()
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = "yyyy-MM-dd"
                let formattedDate = dateFormatter.date(from: PROFILE_BIRTH_AGE!)

                row.value = formattedDate
                row.tag = "\(Constants.PROFILE_BIRTH_AGE)"
            }



            +++ Section("Dating Settings")

            <<< SegmentedRow <String> (){ row in
                row.title = "I am"
                row.options = ["Male", "Female"]
                row.value = PROFILE_GENDER
                row.tag = "\(Constants.PROFILE_GENDER)"
            }

            <<< SegmentedRow <String> (){ row in
                row.title = "I'm interested in"
                row.options = ["Male", "Female"]
                row.value = PROFILE_GENDER_INTEREST
                row.tag = "\(Constants.PROFILE_GENDER_INTEREST)"
            }

            +++ Section("Save Profile")
            <<< ButtonRow() {
                $0.title = "Save"
                }
                .onCellSelection {  cell, row in

                    self.saveProfileSettings()

            }

            +++ Section("Come Back Later")
            <<< ButtonRow() {
                $0.title = "Sign Out"
                }
                .onCellSelection {  cell, row in

                    self.signOut()
            }




        self.stopAnimating()


    })

    //STOP


}

Saya tidak tahu apa yang menyebabkan kesalahan ini terjadi!


person BrandonMayU    schedule 21.08.2017    source sumber
comment
Sepertinya sesuatu bernama profileDisplayName diduplikasi.   -  person ryantxr    schedule 21.08.2017
comment
Saya telah memindai semuanya dan saya dapat menemukan duplikatnya.   -  person BrandonMayU    schedule 21.08.2017
comment
dapatkah Anda memposting kode formulir eureka Anda? @BrandonMayU   -  person Reinier Melian    schedule 22.08.2017
comment
@ReinierMelian Saya telah memperbarui pertanyaan saya, semoga Anda dapat membantu!   -  person BrandonMayU    schedule 22.08.2017
comment
@ReinierMelian terima kasih   -  person BrandonMayU    schedule 28.08.2017
comment
@ReinierMelian ada lagi?   -  person BrandonMayU    schedule 28.08.2017


Jawaban (1)


Masalah yang Anda hadapi disebabkan oleh penambahan baris atau bagian dengan nilai tag String yang sama. Di Formulir Eureka, tag untuk sel atau bahkan bagian harus unik, jadi jika Anda menambahkan 2 baris dengan tag yang sama, ini akan menyebabkan pengecualian penegasan

Anda memiliki perilaku seperti ini di beberapa bagian kode Anda, namun saya akan mengambil baris nama sebagai contoh

 <<< NameRow(){ row in

                row.title = "Name"
                row.placeholder = "Enter Name"
                row.value = PROFILE_DISPLAY_NAME
                row.tag = "\(Constants.PROFILE_DISPLAY_NAME)"  

                }

seperti yang Anda lihat row.tag = "\(Constants.PROFILE_DISPLAY_NAME)" ini adalah baris yang menyebabkan masalah, saya berasumsi bahwa Constants.PROFILE_DISPLAY_NAME adalah String yang ditentukan di beberapa bagian proyek Anda, string ini tidak berubah dan ketika Anda akan menambahkan hasil kedua dari metode ini

databaseRef.child("profiles").child(userID!).observe(.value, with: { (snapshot) in

aplikasi Anda mogok karena Anda menambahkan Constants.PROFILE_DISPLAY_NAME untuk kedua kalinya dengan nilai yang sama "profileDisplayName"

cara untuk memperbaikinya

Sebagai solusi yang mungkin untuk masalah ini, Anda dapat menambahkan nilai unik untuk setiap pengguna yang diambil, katakanlah userID

Kode tetap untuk kasus NameRow

 <<< NameRow(){ row in

                row.title = "Name"
                row.placeholder = "Enter Name"
                row.value = PROFILE_DISPLAY_NAME
                row.tag = "\(Constants.PROFILE_DISPLAY_NAME)\(userID)"  

                }
person Reinier Melian    schedule 27.08.2017