在Swift中永远不会调用xmppStreamDidConnect

时间:2019-04-18 11:39:43

标签: ios swift xmppframework

我正在尝试使用XMPPFramework连接到Swift应用程序中的聊天服务器,但是didConnect委托方法从未被调用。 我已经在Objective C中创建了一个基本应用,并且可以在聊天服务器中进行连接和身份验证,而不会出现问题。

在Swift项目中,我尝试连接以下代码:

class AppDelegate: UIResponder, UIApplicationDelegate {
    var stream:XMPPStream = XMPPStream()
    var reconnect:XMPPReconnect = XMPPReconnect()
    var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    stream.addDelegate(self, delegateQueue: DispatchQueue.main)
    stream.myJID = XMPPJID(string: "user@chatserver.net")
    reconnect.activate(stream)
    do {
        try stream.connect(withTimeout: XMPPStreamTimeoutNone)
    }
    catch let err{
        print("error occured in connecting\(String(describing: err.localizedDescription))")
    }
    return true
}

我已经调试了XMPPFramework,并且在方法-(void)handleStreamFeatures中执行了对委托的调用:

[multicastDelegate xmppStreamDidConnect:self];

我看过了multicastDelegateObject,并有一个引用我的委托和OS_dispatch_queue_main的节点,但是执行后,我的xmppStreamDidConnect方法没有执行。

1 个答案:

答案 0 :(得分:0)

如本Github Issue,中所述,问题在于方法声明。 我的xmppStreamDidConnect需要一个下划线,根本的问题是,如果不导入swift扩展,编译器会将该声明标记为错误的,尽管它可以工作。 因此,要解决我的问题,我需要导入pod'XMPPFramework / Swift'并将方法声明更改为

func xmppStreamDidConnect(_ sender: XMPPStream) {