首先导入花名册模块,理由同上篇文章,这里不再具体说明

// 花名册模块
#import "XMPPRoster.h"
#import "XMPPRosterCoreDataStorage.h"

初始化花名册模块,并激活

//设置花名册模块self.rosterStorage=[[XMPPRosterCoreDataStorage alloc]init];self.roster=[[XMPPRoster alloc]initWithRosterStorage:self.rosterStorage];[self.roster activate:self.stream];

花名册模块也是先从服务器获取在存到本地数据库,再从本地数据库获取利用CoreData花名册存在XMPPUserCoreDataStorageObject表中,CordData有个很强大的类是

NSFetchedResultsController,他可以监听数据值的变化,如果设置代理了一但变化就会通知代理,这时候当一个用户的在线状态发生变化时刷新表格即可,免得用kvo监听属性比较麻烦<当切换登录用户时会把数据库里的好友数据删除,在把新的当前用户的好友数据加到数据库>

XMPPTool *tool=[XMPPTool sharedXMPPTool];NSManagedObjectContext *context=tool.rosterStorage.mainThreadManagedObjectContext;NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:@"XMPPUserCoreDataStorageObject"];//对结果进行排序NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];request.sortDescriptors=@[sort];//设置谓词过滤NSPredicate *pre=[NSPredicate predicateWithFormat:@"subscription!=%@",@"none"];request.predicate=pre;//此处是设置过滤,none为加好友请求没有同意的好友self.resultController=[[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];//设置代理self.resultController.delegate=self;NSError *error=nil;//执行[self.resultController performFetch:&error];if (error) {LSLog(@"出错:%@",error);}

取出表中每一行数据,即一个好友用户信息,user.photo为nil,所以每个好友头像都得自己利用头像模块获取

XMPPUserCoreDataStorageObject *user=self.resultController.fetchedObjects[indexPath.row];if (user.photo) {cell.imageView.image=user.photo;}else {XMPPTool *tool=[XMPPTool sharedXMPPTool];cell.imageView.image= [UIImage imageWithData:[tool.avatar photoDataForJID:user.jid]];}cell.textLabel.text=user.nickname;switch (user.sectionNum.intValue) {case 0:cell.detailTextLabel.text=@"在线";break;case 1:cell.detailTextLabel.text=@"离开";break;case 2:cell.detailTextLabel.text=@"离线";break;default:cell.detailTextLabel.text=@"未知";break;}

NSFetchedResultsController代理方法实现,数据改变刷新表格

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{[self.tableView reloadData];
}

删除好友,利用花名册模块删除

        XMPPTool *tool=[XMPPTool sharedXMPPTool];XMPPUserCoreDataStorageObject *user=self.resultController.fetchedObjects[indexPath.row];[tool.roster removeUser:user.jid];

加好友,首先利用花名测存储模块判断是否存在当前要添加用户

if (self.contactTextField.text==nil) {[KVNProgress showErrorWithStatus:@"请输入用户名"];return;}if ([self.contactTextField.text isEqualToString:[LSAccount sharedAccount].loginName]) {[KVNProgress showErrorWithStatus:@"不能添加自己"];return;}XMPPTool *tool=[XMPPTool sharedXMPPTool];NSString *user=self.contactTextField.text;XMPPJID *userJid=[XMPPJID jidWithUser:user domain:[LSAccount sharedAccount].domain resource:@"iPhone6s"];if ([tool.rosterStorage  userExistsWithJID:userJid  xmppStream:tool.stream]){[KVNProgress showErrorWithStatus:@"此好友已经存在"];}else {//在XMPP里订阅即是添加[tool.roster subscribePresenceToUser:userJid];}/*添加好友在现有openfire存在的问题1.添加不存在的好友,通讯录里面也现示了好友解决办法1. 服务器可以拦截好友添加的请求,如当前数据库没有好友,不要返回信息<presence type="subscribe" to="werqqrwe@127.0.0.1"><x xmlns="vcard-temp:x:update"><photo>b5448c463bc4ea8dae9e0fe65179e1d827c740d0</photo></x></presence>解决办法2.过滤数据库的Subscription字段查询请求none 对方没有同意添加好友to 发给对方的请求from 别人发来的请求both 双方互为好友*/

XMPP协议获取花名册(好友列表)相关推荐

  1. 爬虫实现:获取微信好友列表爬取进行好友分析

    本项目已经上传到github上面:https://github.com/wangqifan/WeChatAnalyse 这个Demo是利用HttpWebRequest和HttpWebResponse来 ...

  2. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  3. 原生JS获取QQ好友列表

    JS内容如下: /*** @author ius.* @date 2022/8/1* @introduction 获取QQ好友列表*/function getCookie(aim) {const al ...

  4. python微信好友_python 获取微信好友列表的方法(微信web)

    如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...

  5. python:获取微信好友列表信息(二)进行导出微信好友到csv数据读取与处理

    接上一篇:https://blog.csdn.net/seoyundu/article/details/81543656 代码中:对csv文件读取,并利用pandas库处理,统计出好友信息. pand ...

  6. QQ登录回调地址实现:【获取qq好友列表数据】附实例

    QQ登录回调地址实现:[获取qq好友列表数据] <?php require_once("../../API/qqConnectAPI.php"); $qc = new QC( ...

  7. qq好友列表获取,利用curl 模拟获取qq好友列表获取接口

    qq好友列表获取,利用curl 模拟获取qq好友列表获取接口 代码如下: //模拟浏览器查找好友列表$url = "http://cgi.find.qq.com/qqfind/buddy/s ...

  8. js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息

    js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息   Lan   2020-05-31 12:13   126 人阅读  0 条评论 QQ群网站:https://qun.qq.com ...

  9. C# 获取QQ好友列表信息的实现

    分析部分 当我们访问QQ空间的时候,大家可以在右侧的发现一个这样的统计信息  当点击这个链接的时候,会跳转到    这样一个URL  这个URl可以管理好友,当然也就能读取到好友  上面我们是在浏览器 ...

最新文章

  1. 成为真正的变革型CIO,代价几何?
  2. 常见汉字Unicode编码
  3. redis setnx 分布式锁_Spring Boot 整合 Redis 正确的实现分布式锁
  4. Java程序员进阶的 3 个层次,你处于哪个?
  5. php简单网页制作代码,用HTML和CSS以及JS制作简单的网页菜单界面的代码
  6. jzoj3055-比赛【数学,统计】
  7. PHP建站环境搭建:汇总网上常见的1键安装包
  8. 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码
  9. 自顶向下 计算机网络知识,计算机网络(自顶向下)第七版考试复习要点(第四章)...
  10. matplotlib——在 Jupyter Notebook中绘制图像时只显示变量信息不显示图片
  11. C++--第12课 - 操作符重载 - 上
  12. python输入一个序列_Python序列合并,python
  13. unity 入门学习之(二)脚本学习
  14. 汉语拼音分音节的程序
  15. VS 调试时,不允许修改代码
  16. SharePoint 2013 App Development读书笔记1
  17. matlab中eval的用法
  18. 冯建文《数字电路设计》读书笔记
  19. 成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说
  20. 频率控制方式及优缺点总结

热门文章

  1. 河北2022中国农民丰收节 国稻种芯:主会场活动在塔元庄举行
  2. python 自动问答系统_外虎知乎自动问答系统
  3. 北大四学生入围英国电影学院游戏设计大奖
  4. TI/德州仪器 TPS57040QDGQRQ1 封装MSOP-10 批次20+ 未税单价110
  5. 乐观锁、悲观锁原理解析
  6. 简单网店php,Php免费商城系统让你白手起家开网店
  7. 自适应小清新宇航员404页面模板
  8. word2016怎么去掉下面的红色波浪线
  9. 编程思维是一种什么思维?
  10. 如何用ARDUINO制作一个鸟蛋孵化器