使用CoreData获取XMPPFramework中的名单

时间:2016-02-25 02:27:14

标签: ios core-data xmpp

我想从xmppRosters获得名单。有两种方法:

  1. 发送iq

    - (void)queryRoster {
        NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
        NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
        XMPPJID *myJID = self.stream.myJID;
        [iq addAttributeWithName:@"from" stringValue:@"zhaoyan@127.0.01"];
        [iq addAttributeWithName:@"to" stringValue:@"127.0.0.1"];
        [iq addAttributeWithName:@"id" stringValue:@"1993"];
        [iq addAttributeWithName:@"type" stringValue:@"get"];
        [iq addChild:query];
        [self.stream sendElement:iq];
    }
    
  2. 获取CoreData的名单,但我没有得到正确的结果,我非常沮丧。

    - (void)getRosters
    {
        self.xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc]init];
        self.roster = [[XMPPRoster alloc]initWithRosterStorage:_xmppRosterStorage];
        _roster.autoFetchRoster = YES;
        _roster.autoAcceptKnownPresenceSubscriptionRequests= YES;
    
        [_roster fetchRoster];
        [_roster activate:self.stream];
        self.context = _xmppRosterStorage.mainThreadManagedObjectContext;
    
    
        NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:NSStringFromClass([XMPPUserCoreDataStorageObject class])];
        NSString * useinfo = @"zhaoyan@127.0.0.";
        NSPredicate *predicate =[NSPredicate predicateWithFormat:@"streamBareJidStr=%@",useinfo];
        request.predicate = predicate;
        NSSortDescriptor * sortD = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
        [request setSortDescriptors:@[sortD]];
    
        self.resultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:self.context sectionNameKeyPath:nil cacheName:nil];
        // 执行fetch
        NSError * error = nil;
        [self.resultsController performFetch:&error];
        self.resultsController.delegate = self;
    
        if (error)
        {
            NSLog(@"error coredata");
        }
        else
        {
            NSLog(@"fetch array : %@",[self.resultsController fetchedObjects]);
        }
    

0 个答案:

没有答案