打開下面這段代碼工作得很好,如果在項目屬性中選擇垃圾收集沒有打開。但隨着GC打開,這是錯誤消息:XML元素插入錯誤的
「*斷言失敗 - [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");
}
就是這樣。仍然需要了解更多關於內存管理的知識! – user523234 2011-05-18 16:59:29
這看起來像一個錯誤。如果沒有GC'nodeToAdd'沒有父,與GC它有一個...使用'copy'只是規避錯誤。所以,除非我在這裏是完全關閉基地,我建議你的文件與蘋果的bug報告。 – CRD 2011-05-18 19:30:26
我懷疑我們真的沒有完整的代碼 - 如果父節點被釋放但節點被保留,它可能會將其子節點的父節點設置爲'nil',但由於引用不是'__weak',它在GC環境中不會這樣做。 – 2011-05-18 20:07:04