无法在 xmpp 的聊天屏幕中获取接收消息
Posted
技术标签:
【中文标题】无法在 xmpp 的聊天屏幕中获取接收消息【英文标题】:Unable to get the receive messages in chat screen in xmpp 【发布时间】:2015-10-12 07:05:56 【问题描述】:我正在制作一个基于聊天的应用程序,我可以发送消息,但无法在我的聊天屏幕中接收消息,所以任何人都可以帮助我 这是我的代码
if ([[message elementForName:@"body"] stringValue]==nil)
else
NSString *messageBody = [[message elementForName:@"body"] stringValue];
XMPPUserCoreDataStorageObject *user = [xmppRosterStorage userForJID:[message from]
xmppStream:xmppStream
managedObjectContext:[self managedObjectContext_roster]];
NSString *displayName = [user displayName];
BOOL isComposing = NO;
NSString *MyString;
NSDate *now = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// [dateFormatter setDateFormat:@"yyyy-MM-dd-HH-mm-ss"];
[dateFormatter setDateFormat:@"HH:mm,yyyy/MM/dd"];
MyString = [dateFormatter stringFromDate:now];
NSLog(@"TIME AND DATE=>%@",MyString);
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSString *myJID=[NSString stringWithFormat:@"%@@xxxx-mac-mini-2.local",[defaults valueForKey:@"userNameJID"]];
NSString *friendID=[[[message attributeForName:@"from"] stringValue] stringByDeletingLastPathComponent];
NSLog(@"---chatToUserId=>%@",friendID);
if ([message isChatMessageWithBody])
XMPPUserCoreDataStorageObject *user = [xmppRosterStorage userForJID:[message from]
xmppStream:xmppStream
managedObjectContext:[self managedObjectContext_roster]];
NSString *body = [[message elementForName:@"body"] stringValue];
NSString *displayName = [user displayName];
NSString *msg = [[message elementForName:@"body"] stringValue];
NSString *from = [[message attributeForName:@"from"] stringValue];
// [xmppMessageArchivingStorage archiveMessage:message outgoing:NO xmppStream:xmppStream];
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject:msg forKey:@"msg"];
[m setObject:from forKey:@"sender"];
在 xmpp 委托方法中是 didReceiveMessage 但我如何分配给聊天屏幕类。
【问题讨论】:
【参考方案1】:你需要学习:
XMPPMessageArchiving
是与 XMPPFramework
捆绑在一起的示例模块,它将所有传入和传出消息存储到 CoreData 支持的数据库中。
NSFetchedResultsController
- Apple 提供的标准类,用于向 UITableView
或 UICollectionView
提供数据,您可以将其用作“聊天屏幕”类的核心,它会自动跟踪新消息并更新 UI。
示例iPhoneXMPP
项目有一个由 UITableView 和 NSFRC 支持的“名单屏幕”示例,“聊天屏幕”的唯一两个区别是:
-
您需要获取
XMPPMessageArchiving_Message_CoreDataObject
实体
您需要指定 NSPredicate
以仅获取与单个“聊天”相关的消息,例如 bareJid == %@
并将好友的 JID 传递给此谓词
【讨论】:
感谢重播,我能够接收消息但未显示在 tableview 聊天屏幕中,并且我正在使用 sqlite 数据库存储我正在插入发送/接收消息。获取我正在使用 nspredicate NSPredicate *predicate = [NSPredicate predicateWithFormat:@"subscription=='both'"]; 您的代码试图重新发明 XMPPMessageArchiving 模块,尝试查看其代码并了解其工作原理以上是关于无法在 xmpp 的聊天屏幕中获取接收消息的主要内容,如果未能解决你的问题,请参考以下文章