2016-04-22 5 views
1

Ich entwickle eine iOS-Anwendung mit Swift, die über Sockets mit einem Android-Gerät verbunden ist. Ich habe Starscream implementiert und konnte mich mit dem anderen Gerät verbinden. Mein Problem besteht darin, dass beim Drucken von etwas in der WebsocketDidConnect-Delegatmethode nicht gedruckt wird. Wenn ich socket.isConnected drucke, wird auch false ausgegeben. Bitte hilf mir. Vielen Dank. Andere Alternativen zu Starscream sind ebenfalls willkommen, danke!Starscreams socket.isConnected gibt immer false zurück

Hier ist mein Code:

import Starscream 
    class SettingsViewController: UIViewController, UITextFieldDelegate, WebSocketDelegate{ 

    override func viewDidLoad() { 
      super.viewDidLoad() 

     let socket = WebSocket(url: NSURL(string: "ws://\(ipAddressTextField.text!):4000/")!) 
     socket.connect() 

     print("socket.isConnected \(socket.isConnected)") //this one is false 

     socket.onConnect = { 
      print("Connected...") // does not print 
     } 

     socket.onDisconnect = { (error: NSError?) in 
      print("websocket is disconnected: \(error?.localizedDescription)") // this one prints when I turn the wifi off 
     } 

     socket.onData = { (data: NSData) in 
      print("got some data: \(data.length)") 

     } 

    } 

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)") 
} 

} 

Antwort

0

Sie müssen es als Klasseneigenschaft machen sonst wird es freigegeben werden, wie es aus viewDidLoad Methode bekommt.

Verwandte Themen