objective-c - Objective-C 垃圾收集打开时 xml 元素插入错误

标签 objective-c xml cocoa xcode garbage-collection

如果未在项目属性选项中打开垃圾收集,以下代码可以正常工作。但是当 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]];

关于objective-c - Objective-C 垃圾收集打开时 xml 元素插入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6048072/

相关文章:

ios - 当用户向服务器发送请求并且用户切换到另一个屏幕并返回到上一个时,UITableView 数据不会重新加载

objective-c - GLKBaseEffect prepareToDraw GL 错误 : 0x0501

ruby-on-rails - 使用 Ruby on Rails (1.4GB) 解析非常大的 XML 文件——有没有比 SAXParser 更好的方法?

cocoa - 如何跟踪 NSMatrix 单元格中的鼠标悬停?

iphone - cocoa 中的 NSRunLoops?

iphone - 是否可以在 CAKeyFrameAnimation 中向后播放路径?

objective-c - 将 CGEvents 击键发送到后台应用程序

javascript - W3Schools 无法复制 tryit 编辑器

php - 如何查看 PHP SOAP 客户端类生成的实际 XML?

cocoa - 'cat' 命令的 NSTask 问题