我使用XMPP框架在iOS中开发了一个聊天应用程序。已成功完成用户的身份验证。我也能够收到其他用户的消息。但是无法向同一个人发送消息。我使用XMPPStream类的sendElement方法来发送消息。连接在开始时成功建立,即在登录时,我也能够查看在线和离开用户。但是只有在发送消息时连接才会丢失。每当我尝试发送消息时,连接状态在发送元素方法中始终显示为断开连接,即STATE_XMPP_DISCONNECTED。
有人可以告诉我为什么在向任何用户发送消息时发生连接丢失的原因。
我已经浏览了下面的链接,但没有得到任何帮助。 1)XMPPFramework message not sent 2)Send a message via XMPPFramework for iOS
我的应用流程如下: 登录后,将显示在线/离开的用户列表。 点击一个用户,我得到下一个与他聊天的屏幕,其中我输入我的消息并点击发送按钮。
以下是我发送邮件的代码:
- (IBAction)sendMessage {
NSString *messageStr = self.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:[NSString stringWithFormat:@"%@@cwt-dst-w005",chatWithUser ]];
[message addChild:body];
self.messageField.text = @"";
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject:messageStr forKey:@"msg"];
[m setObject:@"you" forKey:@"sender"];
[messages addObject:m];
[self.tView reloadData];
NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:messages.count-1
inSection:0];
[self.tView scrollToRowAtIndexPath:topIndexPath
atScrollPosition:UITableViewScrollPositionMiddle
animated:YES];
}
这就是我将状态断开的地方。
- (void)sendElement:(NSXMLElement *)element
{
if (element == nil) return;
NSLog(@"STATE--->%d",state);
dispatch_block_t block = ^{ @autoreleasepool {
if (state == STATE_XMPP_CONNECTED)
{
[self sendElement:element withTag:TAG_XMPP_WRITE_STREAM];
}
else
{
[self failToSendElement:element];
}
}};
if (dispatch_get_specific(xmppQueueTag))
block();
else
dispatch_async(xmppQueue, block);
}