gpt4 book ai didi

objective-c - 如果我尝试发布 CXMLDocument 会发生奇怪的崩溃

转载 作者:行者123 更新时间:2023-11-28 23:15:18 25 4
gpt4 key购买 nike

我正在使用 TouchXML 解析一些 XML,但出现崩溃 -EXC_BAD_ACCESS。我通过反复试验发现,如果我不释放我的 CXMLDocument(我分配的),那么一切都很好。这是我的代码:

- (NSArray *)getLookUps {

//Do some stuff and then...

NSData *tempData = [NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:nil];



CXMLDocument *xmlDoc = [[CXMLDocument alloc] initWithData:tempData options:0 error:nil];
NSDictionary *mappings = [NSDictionary dictionaryWithObject:@"http://****/****"
forKey:@"****"];

NSLog(@"%@", [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding]);
NSArray *orders = [[xmlDoc rootElement] nodesForXPath:@"//****:Unit"
namespaceMappings:mappings
error:nil];

NSMutableArray *units = [NSMutableArray arrayWithCapacity:200];

for (CXMLElement *order in orders) {
NSArray *nodes = [order children];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:[nodes count]];

for (CXMLElement *node in nodes) {
[dictionary setObject:[node stringValue] forKey:[node name]];
}
[units addObject:dictionary];
}

//[xmlDoc release];
return units;
}

参见倒数第二行,[xmlDoc release]。我已经注释掉了,因为如果我不这样做它就会崩溃。我究竟做错了什么?谢谢。

最佳答案

您可能需要保留您的字典对象,否则它也会在您释放解析器时被释放。尝试将 [units addObject:dictionary]; 更改为 [units addObject:[dictionary retain]];

另一个想法是将您的 xmlDoc 指针设置为自动释放:

CXMLDocument *xmlDoc = [[[CXMLDocument alloc] initWithData:tempData options:0 error:nil] autorelease];

关于objective-c - 如果我尝试发布 CXMLDocument 会发生奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6723470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com