2016-05-05 21 views
6

Die Variable ist nicht Null, ich habe eine gute Verbindung und die URL ist korrekt, aber keine Delegate-Methoden aufgerufen werden. Auch ich implementiere WebSocketDelegateStarscream-Delegierte werden nicht aufgerufen

+1

Socket ist eine Member-Variable der Klasse, die ich annehmen, und keine Variable lokal zu einer Methode? – Gruntcakes

+0

Making it eine Eigenschaft mein Problem behoben. Danke – user1079052

Antwort

8

Socket sollte eine Eigenschaft oder eine Variable Ihrer Klasse sein, um sicherzustellen, dass es herum haftet.

Wenn Sie es nur auf eine Funktion stapeln zuteilen wird es außerhalb des Bereichs fallen und die Delegierten werden nie

Hier gecallt ist der Code, den ich in meinem Projekt verwendet haben, nur für den Fall

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


} 

Hier ist die link auf Storyboard nur für den Fall, wenn Sie wollen

Verwandte Themen