xmppStreamDidConnect 永远不会在 Swift 中被调用
Posted
技术标签:
【中文标题】xmppStreamDidConnect 永远不会在 Swift 中被调用【英文标题】:xmppStreamDidConnect never gets called in Swift 【发布时间】:2019-04-18 11:39:42 【问题描述】:我正在尝试使用 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】:正如Github Issue, 中所述,问题在于方法声明。
我的xmppStreamDidConnect
需要一个下划线,根本问题是如果你不导入 swift 扩展,编译器会将该声明标记为不正确,尽管它可以工作。
所以要解决我的问题,我需要导入 pod 'XMPPFramework/Swift' 并将方法声明更改为
func xmppStreamDidConnect(_ sender: XMPPStream)
【讨论】:
以上是关于xmppStreamDidConnect 永远不会在 Swift 中被调用的主要内容,如果未能解决你的问题,请参考以下文章
RequestPermissionsAsync 永远不会返回