套接字连接用户在 swift 中多次触发

Socket connectUser getting triggered multiple times in swift

本文关键字:swift 连接 用户 套接字      更新时间:2023-09-26

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

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