如果未在项目属性选项中打开垃圾收集,则以下代码可以正常工作。但是在GC打开的情况下,这是错误消息:

“ *在-[NSXMLFidelityElement insertChild:atIndex:],/ SourceCache / Foundation / Foundation-751.53 / XML.subproj / XMLTypes.subproj / NSXMLElement.m:823中的断言失败”
“无法添加有父母的孩子;首先分离或复制”

有什么建议吗?

 -(void)insertXmlRecord
{
    //xmlDoc is an iVar
    NSXMLElement *nodeToAdd = [[NSXMLElement alloc] initWithXMLString:[self readOnScreenSetAttrib] error:nil];
    NSError *err=nil;
    NSXMLElement *thisName;
    NSArray *nodes = [xmlDoc nodesForXPath:@"./dream" error:&err];
    NSLog(@"insertXMLRecord xmldoc %@", xmlDoc);
    if ([nodes count] > 0 )
    {
        thisName = [nodes objectAtIndex:0];
        NSLog(@"insertXMLRecord: thisname: %@", thisName);
        NSLog(@"insertXMLRecord: nodeToAdd: %@", nodeToAdd);
        [thisName addChild:nodeToAdd];
    }
    //NSLog(@"insertXMLRecord");
}

最佳答案

您会看到,因为在启用GC的情况下,父节点被视为“仍在使用”,因此仍附加到其子节点。您必须先复制子节点,然后再将其添加到thisName

[thisName addChild:[nodeToAdd copy]];

10-08 03:38