【发布时间】:2013-06-21 20:16:50
【问题描述】:
我正在使用 Robbie Hanson 的 XMPP 框架为 iOS 设计一个聊天应用程序:https://github.com/robbiehanson/XMPPFramework
我可以使用以下代码将我发送的消息存储到一个字典中,该字典是我的 tableview 的数据源:
- (IBAction)sendMessage {
NSString *messageStr = messageField.text;
if([messageStr length] > 0) {
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:messageStr];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:chatWithUser];
[message addChild:body];
[[[self appDelegate] xmppStream] sendElement:message];
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject:messageStr forKey:@"msg"];
[m setObject:@"you" forKey:@"sender"];
[messages addObject:m];
[self.tView reloadData];
}
}
但是 didReceiveMessage 是在 AppDelegate 中定义的,我无法将接收到的消息存储在本地字典中,因此无法在 TableView 中显示。我的 didReceiveMessage 函数如下所示:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
// A simple example of inbound message handling.
if ([message isChatMessageWithBody])
{
XMPPUserCoreDataStorageObject *user = [xmppRosterStorage userForJID:[message from]
xmppStream:xmppStream
managedObjectContext:[self managedObjectContext_roster]];
NSString *messageBody = [[message elementForName:@"body"] stringValue];
NSString *displayName = [user jidStr];
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:displayName
message:messageBody
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}
else
{
// We are not active, so use a local notification instead
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.alertAction = @"Ok";
localNotification.alertBody = [NSString stringWithFormat:@"From: %@\n\n%@",displayName,messageBody];
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
}
}
如何将消息存储到 ChatViewController.m 中定义了 sendMessage 的消息字典中?
【问题讨论】:
-
保留对字典所在对象的引用,通过属性暴露字典,使用它。
标签: iphone ios xmpp xmppframework