Ошибка вставки xml-элемента при включенной сборке мусора в Objective-C - PullRequest
1 голос
/ 18 мая 2011

Следующий фрагмент кода работал нормально, если сборка мусора не была включена в параметре свойств проекта.Но с включенным 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");
}

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Вы видите это, потому что при включенном GC родительский узел рассматривается как «все еще используемый» и поэтому остается присоединенным к своему дочернему узлу. Вы должны скопировать дочерний узел перед добавлением его в thisName:

[thisName addChild:[nodeToAdd copy]];
0 голосов
/ 29 марта 2016

это работает для меня спасибо Джонатан Гринспан

 NSDecimalNumber *time = message.time;
    NSXMLElement *timex = [[NSXMLElement alloc] initWithName:@"timex"];
    [timex setStringValue:time.stringValue];
    [timex addChild:[timex copy]];
    [timex addChild:timex];

Att. Карлос Рамирес

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...