我必须下载并解析巨大的XML文件。下载数据发生在NSOperation中,下载完成后还会触发NSXMLParser。
现在,由于我想让用户能够在任何时候取消整个进程,所以我添加了一个cancel按钮,它停止下载并取消操作。
现在我的问题是:即使我的NSOperation在后台运行,当NSXMLParser开始解析时,UI会被完全阻塞。所以触摸“取消”按钮是没有意义的。
怎么会发生这种事?由于我正在从NSOperation内部触发解析器(下载完成后),所以我认为解析也应该在后台执行?!
!编辑!:我做了一个测试。我检查了解析器在上面运行的线程。这是主线。怎么会发生这种事?NSOperation是在后台线程上启动的,解析器怎么会在主线程上?我怎么才能避免这种情况呢?
发布于 2013-05-08 10:44:00
解决了。问题是,NSURLConnection显然是在主线程上调用它的委托,因此每个后续的方法调用也要在主线程上执行。
因此,我只需要显式地将我的方法再次调用到后台。
https://stackoverflow.com/questions/16436706
复制相似问题