2013-05-08 31 views
1

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

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

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

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

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

回答

1

解决了它。问题在于NSURLConnection显然在主线程上调用它的委托,导致在主线程上也执行以下每个方法调用。

所以我不得不明确地把我的方法调用再次到背景。

+0

尽快选择他作为答案 – 2013-05-08 12:31:05

+0

我很乐意,但我必须等待2天;) – 2013-05-08 12:42:00