我在文档中找到了这个:
<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
}
}
答案 0 :(得分:1)
xmppStream?.sendElement(iq)
就像你向服务器发出的请求,所以它不会是即时的。 您需要等待'didReceiveIQ:'之类的委托被调用,然后您将获得响应。
挖掘此代表,我相信您将能够按预期获取数据。
答案 1 :(得分:1)
您正在尝试重新构建与XMPPRoster
捆绑在一起的XMPPFramework
模块:只需在XMPPStream实例上实例化它并activate
,它就会自动同步您的名册和群组。 iPhoneXMPP
示例显示了由此模块备份的组的名单。