ios - NSOperation 中的 NSXMLParser

标签 ios nsxmlparser nsoperation

我必须下载并解析巨大的 XML 文件。下载数据发生在 NSOperation 中,一旦下载完成,它也会触发 NSXMLParser。

现在,因为我想让用户能够随时取消整个过程,所以我添加了一个取消按钮,它会停止下载并取消操作。

现在我的问题是:即使我的 NSOperation 在后台运行,当 NSXMLParser 开始解析时,UI 也会被完全阻塞。所以触摸取消按钮是没有意义的。

这怎么会发生?由于我是从 NSOperation 内部触发解析器(完成下载后),我认为解析也应该在后台执行?!

!!!EDIT!!!:我做了一个测试。我检查了解析器运行的线程。它是主线程。这怎么会发生? NSOperation 是在后台线程上启动的,解析器怎么能在主线程上呢?我该如何避免这种情况?

最佳答案

解决了。问题是 NSURLConnection 显然在主线程上调用它的委托(delegate),导致每个后续方法调用也在主线程上执行。

所以我只需要再次明确地将我的方法调用带到后台。

关于ios - NSOperation 中的 NSXMLParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436706/

相关文章:

ios - 以编程方式将 iPhone 联系人导出到 .vcf 文件

ios - 在给定时间内播放任何音频

java - 使用 Stax 解析器时如何定义 *start* 和 *end* 标记?

iphone - 将 NSOperation 子类化为并发和可取消

iphone - 在for循环中取消NSOperation?

ios - NSOperations、依赖和失败的操作

ios - 设置委托(delegate)时无法单击 textView

ios - 自定义 Action 控件 Swift 3.0

objective-c - whitespaceAndNewlineCharacterSet 似乎在删除特殊字符前的空格

iphone - 远程 xml 文件和 uinavigationcontroller、nsurlconnection 放置