无法添加有父母的孩子;首先分离或复制

时间:2016-10-14 09:32:42

标签: ios objective-c xcode xmppframework

我有一个聊天应用程序,当我阻止他时,我使用下面的代码为会话伙伴创建固定消息:

 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阻止了。所以我不能给他发消息。删除隐私后,所有工作再次起作用。

如果有人遇到同样的问题,请检查接收器是否被阻挡。

感谢所有人!!!

2 个答案:

答案 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];