我有一个聊天应用程序,当我阻止他时,我使用下面的代码为会话伙伴创建固定消息:
NSString *deliveryMessage = [NSString stringWithFormat:@"{ \"sender\":\"%@\", \"senderUserName\":\"%@\", \"groupId\":\"%@\", \"messageType\":\"%@\"}", [USER_DEFAULT valueForKey:WA_USER_ID_KEY], [USER_DEFAULT valueForKey:WA_USER_NAME_KEY], stringId, @"block"];
NSString *recieverJid = [NSString stringWithFormat:@"%@@%@/%@", stringId ,CHAT_SERVER_ADDRESS,CHAT_SERVER_ADDRESS];
NSString *senderJid = [NSString stringWithFormat:@"%@@%@/%@",MY_USER_NAME,CHAT_SERVER_ADDRESS,CHAT_SERVER_ADDRESS];
NSXMLElement *body = [[NSXMLElement alloc]initWithName:@"body"];
[body setStringValue:deliveryMessage];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];//@"chat"
[message addAttributeWithName:@"from" stringValue:senderJid];
[message addAttributeWithName:@"to" stringValue:recieverJid];
[message addChild:[body copy]];
[xmppStream sendElement:message];
总是崩溃错误:Cannot add a child that has a parent; detach or copy first
我使用相同的代码在用户之间和其他未来发送消息。总是有效,但不是。
有什么想法吗?谢谢!
EDIT !!
我的问题是因为接收器被XMPPPrivacy
阻止了。所以我不能给他发消息。删除隐私后,所有工作再次起作用。
如果有人遇到同样的问题,请检查接收器是否被阻挡。
感谢所有人!!!
答案 0 :(得分:1)
在我看来,这是一个错误。 [message addChild:[body copy]];
应该绕过那个错误。
也许这个小小的解决方法可能有效:
创建您身体的副本:
NSXMLElement *copy = [body copy];
然后将copy的父级设置为nil,并将[body copy]
替换为copy
。
答案 1 :(得分:0)
这对我有用:
//NSXMLElement *body = [[NSXMLElement alloc]initWithName:@"body"];
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.xmppStream sendElement:message];