【问题标题】:Cannot add a child that has a parent; detach or copy first无法添加有父级的子级;先分离或复制
【发布时间】:2017-02-23 16:27:00
【问题描述】:

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

 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

我使用相同的代码在用户之间和其他未来发送消息。总是有效,但在这里不行。

有什么想法吗?谢谢!

编辑!! 我的问题是因为接收器被XMPPPrivacy 阻止了。所以我不能给他发信息。在我删除隐私后,所有工作都重新开始。

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

谢谢大家!!!

【问题讨论】:

  • 为什么是[body copy],而不是简单的body
  • 也不工作。第一次很简单,但我之前在网上搜索过,我发现但没有结果
  • 您能解决问题吗?
  • 是的,我的问题是因为该用户被XMPPPrivacy 阻止。在我删除隐私后再次工作。因此,请检查您的用户是否被阻止

标签: ios objective-c xcode xmppframework


【解决方案1】:

在我看来这是一个错误。 [message addChild:[body copy]]; 应该可以避免该错误。

也许这个小技巧可以奏效:

复制你的身体:

NSXMLElement *copy = [body copy];

然后将副本的父级设置为 nil 并使用将 [body copy] 替换为 copy

【讨论】:

  • 不是。同样的问题:NSXMLElement *copy = [body copy]; [message addChild:copy];
【解决方案2】:

这对我有用:

//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];

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多