#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) {