NSXMLParser仅在有时出现错误代码4时,NSData输入总是相同
问题描述:
我正在使用XMLReader类来解析URL中的某些XML。 XML是成功有时解析,有时我得到:NSXMLParser仅在有时出现错误代码4时,NSData输入总是相同
错误域= NSXMLParserErrorDomain代码= 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;
}
答
问题不在于是否data
在你的方法objectWithData
的开头正确;通过解析方法计算得出data
是否正确。解析器完成后,您应该检查data
的完整性。
很有可能,XMLReader返回data
,但您没有正确保留它。偶尔,计算密集型解析器强制垃圾收集(或池回收)并且损坏data
。
只需在objectwithData
方法开始时执行[data retain]
;问题就会消失。
请问在调用'initWithData'之前可以加上'NSLog(“@”%d“,[data length])?' – dasblinkenlight
当然,它返回2008 – Joe
即使出现错误,它是否返回2008? – dasblinkenlight