基于XMPP开发学习------(3)好友列表、发送消息
来源:互联网 发布:3d游戏美工 编辑:程序博客网 时间:2024/06/01 10:39
一、花名册
添加《花名册模块》在WCXMPPTool这个单例类中。
//花名册数据存储模块
@property(nonatomic, strong, readonly)XMPPRosterCoreDataStorage *rosterStorage;
//花名册模块
@property(nonatomic, strong, readonly)XMPPRoster *roster;
添加完模块后。在运行时,系统会自动加信息到数据库,只需要知道去哪个表查找就行。
#pragma mark 方法2
-(void)loadFriends2{
/*使用coredata获取数据*/
//1.上下文[xmpproster.sqlite]
NSManagedObjectContext *context = [WCXMPPTool sharedWCXMPPTool].rosterStorage.mainThreadManagedObjectContext;
//2.fetchrequest[查哪个表]
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];
//3.设置过滤 排序
NSString *jid = [WCUserInfo sharedWCUserInfo].jid;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"streamBareJidStr = %@",jid];
request.predicate = predicate;
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
request.sortDescriptors = @[sort];
//4.执行请求获取数据
_resultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_resultController.delegate = self;
NSError *err = nil;
[_resultController performFetch:&err];
if (err) {
WCLog(@"%@",err);
}
}
#pragma mark NSFetchedResultsControllerDelegate代理(方法2 当数据库内容改变时候 会调用这个方法)
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
//当好友改变时候,刷新表格
[self.tableView reloadData];
}
二、聊天模块
添加《聊天模块》
XMPPMessageArchiving *_msgArchiving;//聊天模块
@property(nonatomic, strong, readonly)XMPPMessageArchivingCoreDataStorage *msgStorage;//聊天数据存储模块
#pragma mark 下载聊天数据
-(void)loadMsgs{
//1.上下文
NSManagedObjectContext *context = [WCXMPPTool sharedWCXMPPTool].msgStorage.mainThreadManagedObjectContext;
//2.请求对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];
//3.设置过滤 排序
//自己的jid , friendJid的user就是没有@后面的,bare就有.
//streamBareJidStr是自己,bareJidStr好友
NSString *jid = [WCUserInfo sharedWCUserInfo].jid;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"streamBareJidStr = %@ AND bareJidStr = %@",jid,self.friendJid.bare];
request.predicate = predicate;
NSLog(@"%@",predicate);
NSSortDescriptor *timesort = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];
request.sortDescriptors = @[timesort];
//4.执行请求获取数据
_resultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_resultController.delegate = self;
NSError *err = nil;
[_resultController performFetch:&err];
if (err) {
WCLog(@"%@",err);
}
}
#pragma mark _resultController中的fetchedObjects.body 就是获取的消息内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *ID = @"ChatCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
XMPPMessageArchiving_Message_CoreDataObject *msg = _resultController.fetchedObjects[indexPath.row];
if([msg.outgoing boolValue]){
//显示消息
cell.textLabel.text = [NSString stringWithFormat:@"Me:%@",msg.body];
}else{
//显示消息
cell.textLabel.text = [NSString stringWithFormat:@"Other:%@",msg.body];
}
return cell;
}
#pragma mark 发送消息
-(void)sendMsgWithText:(NSString *)text{
//设置内容
XMPPMessage *msg = [XMPPMessage messageWithType:@"chat" to:self.friendJid];
[msg addBody:text];
//发送消息
[[WCXMPPTool sharedWCXMPPTool].xmppStream sendElement:msg];
}
- 基于XMPP开发学习------(3)好友列表、发送消息
- 基于Openfire Smack开发即时通讯应用、获取离线消息,发送消息,联系人列表,添加好友(三)
- Android基于XMPP Smack Openfire开发IM(3)建立好友列表
- Android基于XMPP Smack Openfire开发IM(3)建立好友列表
- XMPP开发之获取好友列表
- XMPP学习记录四:关于接受,发送消息和获取好友上下线的状态
- Android基于XMPP Smack Openfire开发IM(4)获取好友列表
- Android基于XMPP Smack Openfire开发IM 【二】获取好友列表
- xmpp 好友列表,删除好友
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- vs中检测内存泄漏的方法
- CentOs之yum详解整理
- 仿知乎滑动隐藏与显示ToolBar,SwipRefreshLayout刷新
- 深入理解JavaScript编程中的同步与异步机制
- 数学题(矩阵快速幂)
- 基于XMPP开发学习------(3)好友列表、发送消息
- gradle 配置文件
- clojure 思考之如何实现无状态
- SAP 外币金额 汇率 转换
- javaee 中servlet jsp HTML 三者路径问题
- Windows 下配置 Python 和 MariaDb
- Android清除本地缓存工具类代码
- Centos7.2下使用YUM快速安装MySQL5.7
- 多行多余文字省略号