连接时,用于Swift 3的推动器API崩溃



我已经使用可可豆pod [pod'pusherswift']集成了我的应用程序的推动器框架。

这些是代码的行:

let pusher = Pusher(key: "XXXXXXXXXXXXXXXXXXXX")
// subscribe to channel and bind to event
let channel = pusher.subscribe("test_channel")
let _ = channel.bind(eventName: "my_event", callback: { (data: Any?) -> Void in
    if let data = data as? [String : AnyObject] {
        if let message = data["message"] as? String {
            print(message)
        }
    }
})
pusher.connect() 

该应用在线路-self.delegate?.debugLog?(message: "[PUSHER DEBUG] Network reachable")处的pusher.connect()崩溃。未显示崩溃报告。

open lazy var reachability: Reachability? = {
        let reachability = Reachability.init()
        reachability?.whenReachable = { [unowned self] reachability in
            self.delegate?.debugLog?(message: "[PUSHER DEBUG] Network reachable")
            if self.connectionState == .disconnected || self.connectionState == .reconnectingWhenNetworkBecomesReachable {
                self.attemptReconnect()
            }
        }
        reachability?.whenUnreachable = { [unowned self] reachability in
            self.delegate?.debugLog?(message: "[PUSHER DEBUG] Network unreachable")
        }
        return reachability
    }()

这看起来您可能会被此处描述的相同问题咬伤。

我认为这是指pusherConnection对象被视为未能在可及性封闭中,但是因为您没有在ViewDidload函数之外对推动器实例进行引用,因此连接对象被清除,而可触及性对象则没有。

因此,要解决此问题,您可能需要在实例化函数的外部声明Pusher对象,以使其徘徊。例如

class ViewController: UIViewController, PusherDelegate {
    var pusher: Pusher! = nil
    ...

,然后在viewDidLoad内进行pusher = Pusher(...,如正常。

我认为您不需要使用pusher.connect()

参见例如详细文档:

let pusher = Pusher(key: "YOUR_APP_KEY")
let myChannel = pusher.subscribe("my-channel")
myChannel.bind(eventName: "new-price", callback: { (data: Any?) -> Void in
    if let data = data as? [String : AnyObject] {
        if let price = data["price"] as? String, company = data["company"] as? String {
            print("(company) is now priced at (price)")
        }
    }
})

或者先尝试一下,看看它是否连接:

let pusher = Pusher(key: "XXXXXXXXXXXXXXXXXXXX")
pusher.connect() 

然后绑定到您的通道。

最新更新