Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法添加具有父级的子级;先拆离或复制_Ios_Objective C_Xcode_Xmppframework - Fatal编程技术网

Ios 无法添加具有父级的子级;先拆离或复制

Ios 无法添加具有父级的子级;先拆离或复制,ios,objective-c,xcode,xmppframework,Ios,Objective C,Xcode,Xmppframework,我有一个聊天应用程序,当我阻止对话伙伴时,我使用以下代码为他创建一条固定消息: NSString *deliveryMessage = [NSString stringWithFormat:@"{ \"sender\":\"%@\", \"senderUserName\":\"%@\", \"groupId\":\"%@\", \"messageType\":\"%@\"}", [USER_DEFAULT valueForKey:WA_USER_ID_KEY], [USER_DEFAULT v

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

 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];
总是出现错误:
无法添加具有父级的子级;先拆离或复制

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

有什么想法吗?谢谢

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

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


谢谢大家

在我看来,这是一个错误<代码>[消息添加子项:[正文副本]]应该可以避免该错误

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

创建身体的副本:

NSXMLElement *copy = [body copy];
然后将copy的parent设置为nil,并使用replace
[body copy]
替换为
copy

这对我很有效:

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

为什么
[body copy]
,而不是简单的
body
?也不起作用。第一次很简单,但是我以前在网上搜索过,我发现但是没有结果你能解决这个问题吗?是的,我的问题是因为该用户被
XMPPPrivacy
阻止了。在我删除隐私后,它又能工作了。因此,请检查您的用户是否被阻止。同样的问题:
nsxmlement*copy=[body copy];[消息addChild:copy]