Socket connectUser 在 swift 中被多次触发
Socket connectUser getting triggered multiple times in swift
我已经从 github https://github.com/appcoda/SocketIOChat
下载了一个示例套接字项目
当我 运行 应用程序工作正常时,但问题是,在我退出用户并输入另一个名称进行连接时,connectUser 方法会被触发多次,具体取决于它的次数连接。我只希望它只连接一次。例如,下面是上面示例中的一段代码
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)
}
每次我输入用户名聊天时,connectToServerWithNickname
方法都会被我尝试输入用户名并多次打印列表的次数触发。我已经检查过,在上面的示例中,套接字被创建为单例 class 并且每次它都使用相同的实例。我应该怎么做才能防止多次通话?
在我搜索时,似乎每个 socket.on 都添加了一个处理程序,因此我通过在调用 on 事件之前添加 socket.off('event') 来修复它。
我已经从 github https://github.com/appcoda/SocketIOChat
下载了一个示例套接字项目当我 运行 应用程序工作正常时,但问题是,在我退出用户并输入另一个名称进行连接时,connectUser 方法会被触发多次,具体取决于它的次数连接。我只希望它只连接一次。例如,下面是上面示例中的一段代码
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)
}
每次我输入用户名聊天时,connectToServerWithNickname
方法都会被我尝试输入用户名并多次打印列表的次数触发。我已经检查过,在上面的示例中,套接字被创建为单例 class 并且每次它都使用相同的实例。我应该怎么做才能防止多次通话?
在我搜索时,似乎每个 socket.on 都添加了一个处理程序,因此我通过在调用 on 事件之前添加 socket.off('event') 来修复它。