2016-03-21 5 views
0

ausgelöst immer ich eine Probe Socket Projekt von Github heruntergeladen haben https://github.com/appcoda/SocketIOChatSockel connectUser mehrfach in schnellen

Wenn ich laufen die App es funktioniert gut, aber das Problem ist, dass, wenn ich einen Benutzer verlassen und einen anderen Namen eingeben Zum Herstellen einer Verbindung wird die connectUser-Methode abhängig von der Verbindungsdauer mehrmals ausgelöst. Ich möchte nur, dass es sich nur einmal verbindet. Zum Beispiel ist unten Stück Code von der Probe über

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) 
    } 

Hier jedes Mal, wenn ich in den Chat mit dem Benutzernamen eingeben, wird die connectToServerWithNickname Methode durch die Anzahl der Male ausgelöst immer ich versuche, den Namen und Drucke eingeben die Liste mehrmals. Ich habe überprüft und im obigen Beispiel der Socket als Singleton-Klasse erstellt und jedes Mal verwendet es die gleiche Instanz. Was muss ich tun, um diesen Mehrfachanruf zu verhindern?

Antwort

0

Als ich suchte, scheint es, dass jeder socket.on einen Handler hinzufügt, also habe ich es durch das Hinzufügen von socket.off ('event') vor dem Aufruf des on-Ereignisses behoben.