Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取XMPP框架的花名册列表_Ios_Ejabberd_Xmppframework - Fatal编程技术网

Ios 获取XMPP框架的花名册列表

Ios 获取XMPP框架的花名册列表,ios,ejabberd,xmppframework,Ios,Ejabberd,Xmppframework,下面是我使用的委托方法,即使调用了它,“queryElement”也被分配了一个nil值。尽管登录用户有许多联系人 -(BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq { NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"]; NSMutableArray *ArrayUsers = [[N

下面是我使用的委托方法,即使调用了它,“queryElement”也被分配了一个nil值。尽管登录用户有许多联系人

-(BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
   NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
   NSMutableArray *ArrayUsers = [[NSMutableArray alloc]init];
   if (queryElement) 
   {
       NSArray *itemElements = [queryElement elementsForName: @"item"];
       [ArrayUsers removeAllObjects];
       for (int i=0; i<[itemElements count]; i++) 
       {
           NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
           [ArrayUsers addObject:jid];
       }
   }
   NSLog(@"users: %@",ArrayUsers);
   return NO;

}

每次好友在线或离线时都被称为。但是需要一份完整的好友名单

要获取完整的花名册列表,您需要发送花名册请求:

- (void)FetchFriends 
{
    NSError *error = [[NSError alloc] init];
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='jabber:iq:roster'/>"error:&error];
    NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];

    [iq addAttributeWithName:@"type" stringValue:@"get"];
    [iq addAttributeWithName:@"id" stringValue:@"ANY_ID_NAME"];
    [iq addAttributeWithName:@"from" stringValue:@"ANY_ID_NAME@weejoob.info"];
    [iq addChild:query];

    [xmppStream sendElement:iq];
}
-(无效)获取好友
{
NSError*error=[[NSError alloc]init];
NSXMLElement*查询=[[NSXMLElement alloc]initWithXMLString:@“错误:&error];
NSXMLElement*iq=[NSXMLElement元素名称:@“iq”];
[iq addAttributeWithName:@“type”stringValue:@“get”];
[iq addAttributeWithName:@“id”stringValue:@“ANY_id_NAME”];
[iq addAttributeWithName:@”来自“stringValue:@”任何\u ID_NAME@weejoob.info"];
[iq addChild:query];
[xmppStream sendElement:iq];
}
服务器响应请求,并通过以下委托方法处理响应:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
    NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
    if (queryElement) 
    {
        NSArray *itemElements = [queryElement elementsForName: @"item"];
        for (int i=0; i<[itemElements count]; i++)
        {
            NSLog(@"Friend: %@",[[itemElements[i] attributeForName:@"jid"]stringValue]);
        }
    }
    return NO;
}
-(BOOL)xmppStream:(xmppStream*)发送方未接收iq:(XMPPIQ*)iq
{
NSXMLElement*queryElement=[iq elementForName:@“query”xmlns:@“jabber:iq:Floster”];
如果(查询项)
{
NSArray*itemElements=[queryElement elementsForName:@“item”];

对于(int i=0;i对于Swift 5:

func fetchFreind(){
        let query = try? DDXMLElement(xmlString:"<query xmlns='jabber:iq:roster'/>")
        let iq =  DDXMLElement(name: "iq")
        iq.addAttribute(withName:"type" , stringValue: "get")
        iq.addAttribute(withName:"id" , stringValue: "ANY_ID_NAME")
        iq.addAttribute(withName:"from" , stringValue: "ANY_ID_NAME@aaa")
        iq.addChild(query!)
        xmppStream.send(iq)
    }
 func xmppStream(_ sender: XMPPStream!, didReceive iq: XMPPIQ!) -> Bool {
        let queryElement = iq.elements(forName:"query")
        if queryElement.count > 0{
            let itemElement = queryElement[0].elements(forName: "item")
            for item in itemElement{
                print("User JID :- \(String(describing: item.attribute(forName: "jid")!))")
            }
        }
        return false
    }

在何处实现{-(void)FetchFriends}method@ChanchalRaj如何设置两者。我可以同时获得这两个用户,但如何发送订阅有时我无法同时获得这两个用户。它显示为从
didReceiveIQ
委托方法从未为我调用。我使用了你的代码。我所做的唯一事情就是将其转换为swift
 func xmppStream(_ sender: XMPPStream!, didReceive iq: XMPPIQ!) -> Bool {
        let queryElement = iq.elements(forName:"query")
        if queryElement.count > 0{
            let itemElement = queryElement[0].elements(forName: "item")
            for item in itemElement{
                print("User JID :- \(String(describing: item.attribute(forName: "jid")!))")
            }
        }
        return false
    }