ios – 红蜘蛛代表没有被召集

变量不是nil,我有一个很好的连接,url是正确的,但没有调用委托方法.我也正在实现WebSocketDelegate
let socket = WebSocket(url: NSURL(string: "UrlHere:port/")!)
            socket.delegate = self;
            socket.connect()
            if socket.isConnected {
                print("websocket is connected")
            }

    func websocketDidConnect(ws: WebSocket) {
        print("websocket is connected")
    }

    func websocketDiddisconnect(ws: WebSocket,error: NSError?) {
        if let e = error {
            print("websocket is disconnected: \(e.localizedDescription)")
        } else {
            print("websocket disconnected")
        }
    }

    func websocketDidReceiveMessage(ws: WebSocket,text: String) {
        print("Received text: \(text)")
    }

    func websocketDidReceiveData(ws: WebSocket,data: NSData) {
        print("Received data: \(data.length)")
    }

    func websocketDidReceivePong(socket: WebSocket) {
        print("Got pong!")
    }

解决方法

套接字应该是您的类的属性或变量,以确保它附近.

如果仅在函数堆栈上分配它,它将超出范围,并且永远不会调用委托

以下是我在项目中使用的代码,以防万一

import UIKit
//import WebSocket
import Starscream

class ViewController: UIViewController,WebSocketDelegate,WebSocketPongDelegate {

    @IBOutlet weak var wsURL: UITextField!

    @IBOutlet weak var wsConsole: UITextView!

    @IBOutlet weak var wsMessage: UITextField!

    var socket:WebSocket!

    override func viewDidLoad() {
        super.viewDidLoad()

//        var webSocketobj:WebSocket = WebSocket()
//        webSocketobj.ipAddresstext = "10.12.1.101"
//        webSocketobj.portText = "8888"
//        webSocketobj.dataToSendText = "hi"
//        webSocketobj.dataRecievedTextView = ""
//        webSocketobj.connectedLabel = ""
//        webSocketobj.connectToServer()


        wsURL.text="ws://10.12.1.101:8888/"
        wsMessage.text="Hi"
        self.navigationItem.leftBarButtonItem?.title="Connect"
        self.navigationItem.rightBarButtonItem?.enabled=false
        // Do any additional setup after loading the view,typically from a nib.
    }

    func websocketDidConnect(socket: WebSocket){
     wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got connected")
         self.navigationItem.leftBarButtonItem?.title="disconnect"
        self.navigationItem.rightBarButtonItem?.enabled=true
    }

    func websocketDiddisconnect(socket: WebSocket,error: NSError?){
    wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got disconnected")
     self.navigationItem.leftBarButtonItem?.title="Connect"
     self.navigationItem.rightBarButtonItem?.enabled=false
    }

    func websocketDidReceiveMessage(socket: WebSocket,text: String){
     wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got a message from server:").stringByAppendingString(text)
    }

    func websocketDidReceiveData(socket: WebSocket,data: NSData){
        print("websocket received data",data)
    }

    @IBAction func writeText(sender: UIBarButtonItem) {
        wsConsole.text = wsConsole.text .stringByAppendingString("\n Client sent a message:").stringByAppendingString(wsMessage.text!)
        socket.writeString(wsMessage.text!)
        self.view .endEditing(true)
    }

    @IBAction func disconnect(sender: UIBarButtonItem) {
         self.view .endEditing(true)
        if socket == nil{
            connect(sender)
        }
        else if socket.isConnected {
            socket.disconnect()
        } else {
            connect(sender)
        }
    }

    func connect(sender:UIBarButtonItem){
        socket = WebSocket(url: NSURL(string:wsURL.text!)!)
        socket.delegate = self
        socket.connect()
    }

    func websocketDidReceivePong(socket: WebSocket){
        wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket received pong")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // dispose of any resources that can be recreated.
    }


}

这是link到故事板,以防万一你想要

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...