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; 
} 
+0

请问在调用'initWithData'之前可以加上'NSLog(“@”%d“,[data length])?' – dasblinkenlight

+0

当然,它返回2008 – Joe

+0

即使出现错误,它是否返回2008? – dasblinkenlight

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

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

只需在objectwithData方法开始时执行[data retain];问题就会消失。