首页 > 解决方案 > 由于打印语句重复 4 次,firestore 文档中的字段值增加了错误的数字

问题描述

所以我的目标是在购买机票时始终具有适当的增量值。我有一个奇怪的错误,当我通过增加它来更新字段值时,由于打印语句中的重复,每次我运行新的模拟时,它都会增加错误的数字,但是如果我要更新在相同的新模拟中再次设置值,之后每次都会增加适当的值。

我用来增加的值是一个标签文本,它依赖于一个UIStepper值。

这是我用来更新和增加这个值的完整函数:

func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
    
    guard let count = guestNumberCount.text else { return }
    guard let labelAsANumber = Int64(count) else { return }
    guard let user = Auth.auth().currentUser else { return }
    
    let dfmatter = DateFormatter()
    dfmatter.dateFormat = "EEEE, MMMM d yyyy, h:mm a"
    let dateFromString = dfmatter.date(from: actualDateOfEvent.text ?? "")
    let dateStamp: TimeInterval = dateFromString!.timeIntervalSince1970
    let dateSt: Int = Int(dateStamp)
    
    
    
    getStudentID { (studid) in
        if let id = studid {
            self.db.document("student_users/\(user.uid)/events_bought/\(self.navigationItem.title!)").setData(["event_name": self.navigationItem.title!, "event_date": self.actualDateOfEvent.text ?? "", "event_cost": self.actualCostOfEvent.text ?? "", "for_grades": self.gradeOfEvent , "school_id": id, "expiresAt":dateSt, "isEventPurchased": true, "time_purchased": Date()], merge: true) { (error) in
                if let error = error {
                    print("There was an error trying to add purchase info to the database: \(error)")
                } else {
                    print("The purchase info was successfully stored to the database!")
                }
            }
        }
    }
    
    getDocumentIDOfSelectedEvent { (eventidentification) in
        if let eventid = eventidentification {
            self.getSchoolDocumentID { (docID) in
                if let doc = docID {
                    self.db.document("school_users/\(doc)/events/\(eventid)/extraEventInfo/TicketCount").updateData(["ticketsPurchased": FieldValue.increment(Int64(labelAsANumber))]) { (error) in
                        if let error = error {
                            print("There was an error updating the number of tickets: \(error)")
                        } else {
                            print("Number of tickets purchased succesfully updated!")
                            print(labelAsANumber)
                        }
                    }
                }
            }
        }
    }
    
    
    performSegue(withIdentifier: Constants.Segues.fromTicketFormToPurchaseDetails, sender: self)
    
    completion(PKPaymentAuthorizationResult(status: .success, errors: []))
}

除了打印语句之外,我无法真正找出函数中的任何问题,无论是在我的整个项目中,还是在这种情况下。在print(labelAsANumber)语句中,它打印了标签文本的正确值(步进值),但它打印了四次,这导致了问题。如何防止重复打印语句和整体不正确的数字递增?

标签: iosswiftxcodegoogle-cloud-firestorecompletionhandler

解决方案


推荐阅读