首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3的Pusher Api在连接时崩溃

Swift 3的Pusher Api在连接时崩溃
EN

Stack Overflow用户
提问于 2016-12-14 13:38:29
回答 2查看 343关注 0票数 2

我已经使用可可pod 'PusherSwift‘在Swift 3中为我的应用程序集成了Pusher框架。

以下是代码行:

代码语言:javascript
复制
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() 

这个应用程序在pusher.connect()的- self.delegate?.debugLog?(message: "[PUSHER DEBUG] Network reachable")行崩溃。未显示任何崩溃报告。

代码语言:javascript
复制
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
    }()
EN

回答 2

Stack Overflow用户

发布于 2016-12-14 18:42:22

这看起来你可能会被同样的问题described here所困扰。

我认为这是因为PusherConnection对象在可达性闭包中被视为无主,但因为您没有在viewDidLoad函数外部保留对推送器实例的引用,所以connection对象会被清除,而可达性对象则不会。

因此,要解决这个问题,您可能需要在实例化它的函数外部声明pusher对象,这样它就会挂起。例如:

代码语言:javascript
复制
class ViewController: UIViewController, PusherDelegate {
    var pusher: Pusher! = nil
    ...

然后在viewDidLoad中像往常一样执行pusher = Pusher(...

票数 3
EN

Stack Overflow用户

发布于 2016-12-18 09:40:50

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

有关示例detailed docs,请参阅

代码语言:javascript
复制
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)")
        }
    }
})

或者,先试试这个,看看它是否连接:

代码语言:javascript
复制
let pusher = Pusher(key: "XXXXXXXXXXXXXXXXXXXX")
pusher.connect() 

然后绑定到您的通道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41135569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档