为什么XMPP函数什么都不返回?

时间:2015-11-02 10:41:48

标签: ios objective-c swift xmpp xmppframework

我在文档中找到了这个:

<iq type='get' id='2'>
    <query xmlns='jabber:iq:roster'/>
</iq>

并将其写在Swift中:

public class func getGroups() {
    var xmppStream: XMPPStream?

    let iq: DDXMLElement = DDXMLElement.elementWithName("iq") as! DDXMLElement
    iq.addAttributeWithName("type", stringValue: "get")
    iq.addAttributeWithName("id", stringValue: "2")

    let query: DDXMLElement = DDXMLElement(name: "query", xmlns: "jabber:iq:roster") as! DDXMLElement
    iq.addChild(query)

    xmppStream?.sendElement(iq)
}

当我从我的ViewController运行它时:

override func viewDidLoad(animated: Bool) {
    print("Group list: \(getGroups())")
}

它返回空值,只是Group list:

我的问题是,如何正确运行我的功能并获得结果,因为当我在服务器中运行我的XMPP <iq>代码段时,它会返回值。

更新 即使在Objective C

中,您也可以编写或更正我的代码

更新

extension OneRoster: XMPPStreamDelegate {
    public func xmppStream(sender: XMPPStream, didReceiveIQ ip: XMPPIQ) -> Bool {
        return false
    }
}

2 个答案:

答案 0 :(得分:1)

xmppStream?.sendElement(iq)

就像你向服务器发出的请求,所以它不会是即时的。 您需要等待'didReceiveIQ:'之类的委托被调用,然后您将获得响应。

挖掘此代表,我相信您将能够按预期获取数据。

答案 1 :(得分:1)

您正在尝试重新构建与XMPPRoster捆绑在一起的XMPPFramework模块:只需在XMPPStream实例上实例化它并activate,它就会自动同步您的名册和群组。 iPhoneXMPP示例显示了由此模块备份的组的名单。