2016-12-19 12 views
1

SwiftR.connectを使用してSignalRを実装しようとしています。私はこれに続いてtutorialです。Swift 3.0を使用したSignalRインプリメンテーション

エラーが発生しました。

Starting... 
Error: Optional(["message": Error during negotiation request.]) 
Disconnected. 

私のソースコード

import UIKit 
import SwiftR 

class ViewController: UIViewController { 

    @IBOutlet weak var statusLabel: UILabel! 
    @IBOutlet weak var startButton: UIButton! 

    var chatHub: Hub! 
    var connection: SignalR! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     SwiftR.useWKWebView = true 

     SwiftR.signalRVersion = .v2_2_1 
     SwiftR.transport = .longPolling   

     connection = SwiftR.connect("http://192.168.X.XX/MyChatApplicationServer/signalr") { [weak self] connection in 

      self?.chatHub = connection.createHubProxy("MyChatHub") 
      self?.chatHub?.on("newMessageReceived") { args in 
       print("MyChatHub on call start") 

       let message = args![0] as! String 
       let detail = args![1] as! String 

       print("Message: \(message) \nDetail: \(detail)") 

      } 

      // SignalR events 
      connection.starting = { [weak self] in 
       self?.statusLabel.text = "Starting..." 
       self?.startButton.isEnabled = false 
       print("Starting....") 
      } 

      connection.reconnecting = { [weak self] in 
       self?.statusLabel.text = "Reconnecting..." 
       self?.startButton.isEnabled = false 
       print("Reconnecting....") 
      } 

      connection.connected = { [weak self] in 
       print("Connection ID: \(connection.connectionID!)") 
       self?.statusLabel.text = "Connected" 
       self?.startButton.isEnabled = true 
       self?.startButton.setTitle("Stop", for: .normal) 
       print("Connected") 
      } 

      connection.reconnected = { [weak self] in 
       self?.statusLabel.text = "Reconnected. Connection ID: \(connection.connectionID!)" 
       self?.startButton.isEnabled = true 
       self?.startButton.setTitle("Stop", for: .normal) 
       print("Stop") 
      } 

      connection.disconnected = { [weak self] in 
       self?.statusLabel.text = "Disconnected" 
       self?.startButton.isEnabled = true 
       self?.startButton.setTitle("Start", for: .normal) 
       print("Disconnected") 
      } 

      connection.connectionSlow = { print("Connection slow...") } 

      connection.error = { error in 
       print("Error: \(error)") 

       // Here's an example of how to automatically reconnect after a timeout. 
       // 
       // For example, on the device, if the app is in the background long enough 
       // for the SignalR connection to time out, you'll get disconnected/error 
       // notifications when the app becomes active again. 

       if let source = error?["source"] as? String, source == "TimeoutException" { 
        print("Connection timed out. Restarting...") 
        connection.start() 
       } 
      } 

      connection.start() 
     } 
    } 

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

    @IBAction func startStop(_ sender: Any) { 

     if let text = startButton.titleLabel?.text{ 
      print("text val: \(text)") 
      connection?.start() 
     }else{ 
      connection?.stop() 
     } 
    } 

} 

注: 1)私はポッドを使用してSignalR インストールを更新していた 'SwiftR' 2)私が使っているのチュートリアルを1としてswift23支店コード 3)ポッドSwiftR lライブラリコードが機能しません。

接続= SigmalR( "http://192.168.X.XX/MyChatApplicationServer/signalr")

次のエラーを取得します。

"Cannot invoke initializer for type 'SignalR' with an argument list of type '(String)'" 

私がの場合は、マスターブランチコードに従ってください。

私にこれを手伝ってください。 ありがとうございます。

+0

ポッド(swift3)、swift23ブランチ、およびマスターブランチ(API変更)はすべて異なるコードです。ライブラリの1つのバージョンを選択してそれに固執する必要があります。 WKWebView = falseが機能してもtrueにならない場合は、おそらくSignalRサーバーでCORSが有効になっていない可能性があります。 – Adam

答えて

0

ご使用の担当者にthis issueを確認してください。

私はアドバイスを考えていますObjC implementation.それはポッドなので何も悪いことはありません。

+0

返信ありがとうが、私は解決策を得て、今は正常に動作しています。 –

0

次のコードにコメントしました。うまくいきました。 //SwiftR.useWKWebView = true

0

この問題はすでにGitHubで議論されています。ここをクリックhttps://github.com/adamhartford/SwiftR/issues/75

SwiftR.useWKWebView = falseで動作しますか?

この場合は、ご使​​用のサーバーでCORSが有効になっていることを確認してください。 WKWebViewがSwiftRと連携するには、CORSが必要です。

関連する問題