2016-03-21 7 views
0
hızlı

bir defadan fazla tetiklenen alma, ama sorun ben bir kullanıcıyı çıkıp başka bir ad girin nerede, yani Bağlanmak için connectUser yöntemi, bağlandığı zaman sayısına bağlı olarak birçok kez tetiklenir. Sadece bir kere bağlamayı istiyorum. Örneğin, aşağıda ben kullanıcı adı ile sohbet girdiğinizde her, connectToServerWithNickname yöntem sayısına tetiklediği oluyorSoket connectUser ben</p> <p>Ben iyi çalışır uygulamayı çalıştırmak github <a href="https://github.com/appcoda/SocketIOChat" rel="nofollow">https://github.com/appcoda/SocketIOChat</a> örnek bir soket projesini indirdiğiniz

İşte
func askForNickname() { 
     let alertController = UIAlertController(title: "SocketChat", message: "Please enter a nickname:", preferredStyle: UIAlertControllerStyle.Alert) 

     alertController.addTextFieldWithConfigurationHandler(nil) 

     let OKAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (action) -> Void in 
      let textfield = alertController.textFields![0] 
      if textfield.text?.characters.count == 0 { 
       self.askForNickname() 
      } 
      else { 
       self.nickname = textfield.text 

       SocketIOManager.sharedInstance.connectToServerWithNickname(self.nickname, completionHandler: { (userList) -> Void in 
        dispatch_async(dispatch_get_main_queue(), {() -> Void in 
         if userList != nil { 

          print("USerlIst:\(userList)") 
          self.users = userList 
          self.tblUserList.reloadData() 
          self.tblUserList.hidden = false 
         } 
        }) 
       }) 
      } 
     } 

     alertController.addAction(OKAction) 
     presentViewController(alertController, animated: true, completion: nil) 
    } 

yukarıdaki örnekten kod parçası Adını ve baskılar girmeye çalışan olduğunu liste birden çok kez. Ben kontrol ettim ve yukarıdaki örnekte soket bir singleton sınıfı olarak yaratılır ve her zaman aynı örneği kullanır. Bu çoklu aramayı önlemek için ne yapmalıyım?

cevap

0

Aradığım gibi, her socket.on bir işleyici eklediğinden, bu olayı çağırmadan önce socket.off ('event') ekleyerek sabitledim.

İlgili konular