XMPP协议获取花名册(好友列表)
来源:互联网 发布:科比季后赛平均数据 编辑:程序博客网 时间:2024/05/01 11:18
首先导入花名册模块,理由同上篇文章,这里不再具体说明
// 花名册模块#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; }
-(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 双方互为好友 */
0 0
- XMPP协议获取花名册(好友列表)
- 获取好友列表(花名册)
- IOS使用XMPP最新教程(四)获取好友列表 (通过花名册)
- ios xmpp研究探索:获取好友列表
- XMPP开发之获取好友列表
- XMPP系列(三)---获取好友列表、添加好友
- xmpp 好友列表,删除好友
- xmpp-iOS-获取好友列表、聊天信息列表、聊天
- XMPP之好友获取
- XMPP-好友列表模块的注册和好友列表获取,添加,删除
- IOS使用XMPP最新教程(三)获取好友列表 (通过获取好友状态)
- iOS xmpp获取好友详情
- xmpp 获取好友无数据
- XMPP协议 好友管理(协议)
- XMPP协议 好友管理(协议)
- facebook 获取好友列表
- 获取QQ好友列表
- Android基于XMPP Smack Openfire开发IM(4)获取好友列表
- 希尔排序
- 关于Fragment懒加载的学习和使用+参数传递的方法
- hiho 挑战赛16 A.王胖浩与三角形
- 串口Termios
- JOS 轮转调度实现
- XMPP协议获取花名册(好友列表)
- 简单计算器
- 黑马程序员—Java基础—IO5
- 随意细解:OC -- 属性、点语法、KVC
- IOS 时区问题
- 基数排序算法之Java实现
- iOS 简单弹幕效果
- iOS开发小技巧:刷新UITableView
- 电脑不插电源启动就没声音的问题