xmppStreamDidConnect никогда не вызывается в Swift

#ios #swift #xmppframework

#iOS #swift #xmppframework

Вопрос:

Я пытаюсь подключиться к своему серверу чата в приложении Swift, используя XMPPFramework, но метод делегирования 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:

Как описано в этом выпуске Github, проблема заключалась в объявлении метода. Мне xmppStreamDidConnect нужно подчеркивание, основная проблема заключалась в том, что если вы не импортируете расширения swift, компилятор помечает это объявление как неверное, хотя оно работает. Итак, чтобы решить мою проблему, мне нужно импортировать модуль ‘XMPPFramework / Swift’ и изменить объявление метода на

 func xmppStreamDidConnect(_ sender: XMPPStream) {