Unter der Taste Male
ausgeführt wird, habe ich zwei Abschluss-Handler. Aus irgendeinem Grund wird der zweite Handler gleichzeitig mit dem ersten Beendigungshandler ausgeführt. Ich bin mit Grand Central Dispatch sehr vertraut (habe meine fehlgeschlagenen Versuche gelöscht), aber ich versuche, dies mit GCD so einzurichten, dass NUR der erste Completion-Handler ausgeführt wird und dann der zweite Handler ausgeführt wird.Wie ein Block von Code nur nach der anderen Block von Code auszuführen
@IBAction func Male(sender: AnyObject) {
FIRDatabase.database().reference().child("users").child(self.userdefaults.objectForKey("FBid") as! String).child("anonymous chatting").child("Males").child("Non-Chatting").observeEventType(.Value, withBlock: { (snapshot2: FIRDataSnapshot!) in
self.nonChatting = Int(snapshot2.childrenCount)
print("yobitch\(self.nonChatting)")
}, withCancelBlock: nil)
//^^^^^^^^^^^^EXECUTE THIS COMPLETION HANDLER FIRST
FIRDatabase.database().reference().child("users").child(self.userdefaults.objectForKey("FBid") as! String).child("anonymous chatting").child("Males").child("Non-Chatting").observeEventType(.ChildAdded, withBlock: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
if self.Malecount < self.listofMaleFriends.count {
self.idArray.append(dictionary)
self.Malecount += 1}
}
self.loopCount += 1
if self.loopCount == self.listofMaleFriends.count-(self.matchingLoopCount) {
self.loopCount = 0
self.matchingLoopCount += 1
if self.idArray.count == self.listofMaleFriends.count-(self.Othercount){
let randomNumber = Int(arc4random_uniform(UInt32(self.idArray.count)))
if self.idArray.isEmpty{
}
else{
let Dictionaire = self.idArray[randomNumber] as! [String: AnyObject]
let id = Dictionaire["id"] as! String
let gender = Dictionaire["gender"] as! String
let name = Dictionaire["name"] as! String
self.idArray.removeAtIndex(randomNumber)
self.Othercount += 1 /* Reduces Male Count*/
let ref = FIRDatabase.database().referenceFromURL("https://game-of-chats-ce897.firebaseio.com/").child("users").child(self.userdefaults.objectForKey("FBid") as! String).child("anonymous chatting").child("Males").child("Chatting").child(id)
let refout = FIRDatabase.database().referenceFromURL("https://game-of-chats-ce897.firebaseio.com/").child("users").child(self.userdefaults.objectForKey("FBid") as! String).child("anonymous chatting").child("Males").child("Non-Chatting").child(id)
ref.setValue(["id": id, "gender": gender, "name": name])
refout.removeValue()
//let user = User()
// user.id = self.friendId
// user.name = self.friendName
// showChatControllerForUser(user)
self.user.id = Dictionaire["id"] as! String
self.user.name = Dictionaire["name"] as! String
//let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
// self.(chatLogController, animated: true, completion: nil)
//self.navigationController?.pushViewController(chatLogController, animated: true)
self.showChatControllerForUser()
}}}
}, withCancelBlock: nil)
}