1

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

错误域 = 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;
}
4

1 回答 1

0

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

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

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

于 2012-06-01T23:41:37.867 回答