我正在尝试使用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
方法没有执行。
答案 0 :(得分:0)
如本Github Issue,中所述,问题在于方法声明。
我的xmppStreamDidConnect
需要一个下划线,根本的问题是,如果不导入swift扩展,编译器会将该声明标记为错误的,尽管它可以工作。
因此,要解决我的问题,我需要导入pod'XMPPFramework / Swift'并将方法声明更改为
func xmppStreamDidConnect(_ sender: XMPPStream) {