Я делаю приложение, которое хранит много книг в firebase. Я получаю очень странную проблему, когда мое приложение будет бесконечным циклом при добавлении новой книги и продолжит добавлять ту же книгу, насколько это возможно. Если бы был какой-то способ, с которым мог бы взглянуть более опытный человек, я был бы очень благодарен.Swift Firebase Completion Block Infinite Loop
@IBAction func userHasBook(sender: AnyObject) { // Called after filling a new book form
let email = FIRAuth.auth()?.currentUser?.email!
let school = email!.substringWithRange(Range(email!.characters.indexOf("@")!.advancedBy(1) ..< email!.characters.indexOf(".")!)) // for db organization
//A few lines here that ensure that the fields are filled correctly (clutter so i didn't add them)
ref.child(school).observeEventType(.Value, withBlock: { (snapshot) in
self.bookIndex = snapshot.value!["numSelling"] as! Int
self.addSellingBook(); // we now know it is done finding the value, right?
}) { (error) in
print(error.localizedDescription)
}
}
func addSellingBook(){
let bookRef = self.ref.child(school).child("selling").child(Int(self.bookIndex).description)
let book : [NSObject : AnyObject] = ["uid": (FIRAuth.auth()?.currentUser?.uid)!,
"title": self.titleField.text!,
"authors": self.authorsField.text!,
"edition": self.editionField.text!,
"price": self.priceField.text!,
"isbn" : self.isbn] // this is the data that is added infinitely many times
bookRef.updateChildValues(book, withCompletionBlock: { (NSError, FIRDatabaseReference) in //update the book in the db
let newIndex = self.bookIndex + 1
self.ref.child(self.school).child("numSelling").setValue(newIndex, withCompletionBlock: { (NSError, FIRDatabaseReference) in // after that update the index
self.performSegueWithIdentifier("backToMain", sender: nil) // and after that go back to main
})
})
Спасибо тонну и спросите меня, если вам нужно что-нибудь еще!
EDIT: JSON ПЕРЕД НИЖЕ
{
"colorado" : {
"numBuying" : 0,
"numSelling" : 0,
"users" : {
"2nU0jp4ITjgQ6ElSQWc7t5qj62t1" : {
"email" : "[email protected]"
}
}
},
"creek" : {
"numBuying" : 0,
"numSelling" : 2,
"selling" : [ {
"authors" : "A. S. A. Harrison",
"edition" : "Only Edition",
"isbn" : "1101608064",
"price" : "5.00",
"title" : "The Silent Wife",
"uid" : "eJvdVx3J8EYZPH3mlbYLBcPDkD12"
}, {
"authors" : "Jamie McGuire",
"edition" : "Only Edition",
"isbn" : "1476712050",
"price" : "5.00",
"title" : "Beautiful Disaster",
"uid" : "eJvdVx3J8EYZPH3mlbYLBcPDkD12"
} ],
"users" : {
"eJvdVx3J8EYZPH3mlbYLBcPDkD12" : {
"email" : "[email protected]"
}
}
}
}
Затем я добавляю еще одну книгу (индекс 2) и скорее продолжает добавлять бесконечные книги и бесконечно увеличивает индекс (numSelling). Я не хочу публиковать этот JSON, поскольку он похож на 300 строк.
Что вы пытаетесь сделать с помощью 'bookRef.updateChildValues (..', пытаетесь ли вы добавить узел базы данных с этой книжной деталью? JSON tree.And это, где начинается ваш бесконечный цикл.? – Dravidian
Кажется, что если у вас есть данные в вашей базе данных, вы получаете их, вызывая 'observEventType', и когда это будет завершено, он будет запускать' addSellingBook', и это заставляет его перемещаться по кругу. –