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

标签 ios xcode nsxmlparser xmlreader

我正在使用 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/

相关文章:

ios - 使用延迟动画暂停 CALayer 动画

iphone - 为什么即使我已经越狱,iOS 6.1.1中的SandBox对于App仍然存在?

ios - React Native 响应式 View Iphone x

iphone - iPhone 中的 XML 解析与身份验证 url

ios - NSXMLParser,解析xml问题

objective-c - 在 Cocoa 中解析 iTunes 库 XML

ios - 协议(protocol)或 BaseViewController

ios - 在 iOS 设备上本地解析和存储对象

iPhone dSYM 崩溃日志符号

JSON后台处理和本地通知