Socket connectUser在swift中被多次触发

Posted

技术标签:

【中文标题】Socket connectUser在swift中被多次触发【英文标题】:Socket connectUser getting triggered multiple times in swift 【发布时间】:2016-03-21 10:06:13 【问题描述】:

我从 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 方法都会被我尝试输入名称的次数触发并多次打印列表。我已经检查过,在上面的示例中,套接字被创建为一个单例类,并且每次它使用相同的实例。我应该怎么做才能防止这个多次调用?

【问题讨论】:

【参考方案1】:

在我搜索时,似乎每个 socket.on 添加了一个处理程序,所以我通过在调用 on 事件之前添加 socket.off('event') 来修复它。

【讨论】:

以上是关于Socket connectUser在swift中被多次触发的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 中的 Socket 获取响应

Socket.IO 错误:zlib 没有这样的模块(Swift 3,Xcode 8.3)

将行中相应的开始-停止时间转换为列

如何正确使用 socket.io-client-swift

无论如何要从 Swift 中的 socket.io 方法返回一些东西吗?

“从服务器收到未知错误......”在 Swift 上使用 Socket.io