1

巨大な XML ファイルをダウンロードして解析する必要があります。データのダウンロードは NSOperation で行われ、ダウンロードが完了すると NSXMLParser もトリガーされます。

ユーザーがいつでもプロセス全体をキャンセルできるようにしたいので、ダウンロードを停止して操作をキャンセルするキャンセル ボタンを追加しました。

今私の問題は次のとおりです。私の NSOperation はバックグラウンドで実行されますが、NSXMLParser が解析を開始すると UI が完全にブロックされます。キャンセルボタンを押しても意味がありません。

これはどのように起こりますか?NSOperation 内からパーサーをトリガーしているので (ダウンロードの終了後)、解析もバックグラウンドで実行する必要があると思いました?!

!!!編集!!!: テストをしました。パーサーが実行されているスレッドを確認しました。メインスレッドです。これはどのように起こりますか?NSOperation はバックグラウンド スレッドで開始されますが、パーサーをメイン スレッドに配置するにはどうすればよいでしょうか? どうすればこれを回避できますか?

4

1 に答える 1

1

解決しました。問題は、NSURLConnection がメイン スレッドでデリゲートを呼び出しているように見え、その結果、後続のすべてのメソッド呼び出しがメイン スレッドでも実行されることでした。

そのため、メソッド呼び出しを再びバックグラウンドで明示的に実行する必要がありました。

于 2013-05-08T10:44:00.447 に答える