gpt4 book ai didi

ios - 当 NSData 输入始终相同时,NSXMLParser 有时只会给出错误代码 4

转载 作者:行者123 更新时间:2023-11-28 17:32:27 28 4
gpt4 key购买 nike

我正在使用 XMLReader 类从 URL 解析一些 XML。 XML 有时被成功解析,有时我得到:

Error Domain=NSXMLParserErrorDomain Code=4 “操作无法完成。(NSXMLParserErrorDomain 错误 4。)”

解析通常在我第一次运行时成功,在更改某些内容之后,然后它会失败,直到我更改其他内容。例如,在下面的代码中,我尝试注释掉 [parser release] 行,并成功解析。然后我再次运行它并返回到错误代码 4。

我每次都记录相同的输入数据,无论成功还是失败。

知道这里出了什么问题吗?如果有帮助,我可以粘贴更多代码,但我已将错误隔离在 NSXMLParser 解析方法(在下面的代码中调用)中,因为它始终接收相同的数据。

谢谢!

编辑:我知道错误代码 4 是空文档错误。但我知道我的 NSData 不是空的。所以这里还有其他事情发生

    - (NSDictionary *)objectWithData:(NSData *)data
{

//data always makes it here, the same data gets logged regardless of parse success

//NSLog(@"%@",data);

// Clear out any old data
[dictionaryStack release];
[textInProgress release];

dictionaryStack = [[NSMutableArray alloc] init];
textInProgress = [[NSMutableString alloc] init];

// Initialize the stack with a fresh dictionary
[dictionaryStack addObject:[NSMutableDictionary dictionary]];

// Parse the XML
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

parser.delegate = self;

[parser setShouldResolveExternalEntities:NO];

BOOL success = [parser parse];

[parser release];


// Return the stack's root dictionary on success
if (success)
{
NSDictionary *resultDict = [dictionaryStack objectAtIndex:0];

return resultDict;
}

return nil;
}

最佳答案

问题不在于方法objectWithData 开头的data 是否正确;通过parse方法计算,data是否正确。您应该在解析器完成后检查数据的完整性。

很可能 data 由 XMLReader 返回,但您没有正确保留它。有时,计算密集型解析器会强制进行垃圾收集(或池回收),并且 data 会损坏。

只需在objectwithData 方法的开头执行[data retain];然后问题就会消失。

关于ios - 当 NSData 输入始终相同时,NSXMLParser 有时只会给出错误代码 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856424/

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