2017-05-31 17 views
-2

スウィフト3でiOSアプリケーションをプログラミングしていて、非常に大きなXMLファイル(103558行)を解析して、Swiftの組み込みXMLParserで必要なすべての情報を取得していますNSXMLParser)を使用してください。スウィフトXML解析のバックグラウンド

主な問題は、アプリケーションがロードされるとすぐにすべての情報が必要になるため、解析が完了するまでUIが12秒間ロックされます(解析は最初のUIページ負荷)。

多くのオンラインとAppleのドキュメントを調べたところ、私はSwift 3の使い方を理解できなかったObjective-Cコード以外はほとんど見つかりませんでした。私の主な質問は、 XMLParserやその他のパーサーをバックグラウンドスレッドや非同期で使用する方法はありますか?

ありがとうございます。あなたがバックグラウンドスレッドで実行することはできません

コール

答えて

2

唯一の操作はUI操作です。

NSXMLParserを使用すると、バックグラウンドスレッドでNSXMLParserを呼び出すのであれば、すべての解析は、バックグラウンドスレッドで起こる

それを呼び出すスレッドに同期してデータを解析します。

let backgroundQueue = DispatchQueue(label: "com.app.queue", 
              qos: .background, 
              target: nil) 
     backgroundQueue.async { 
      //call to 'parse' function of XMLParser 
      DispatchQueue.main.async { 
       //pass parsing result to UI on main thread 
      } 
     } 

xmlがバックグラウンドスレッドで解析されている間も、ユーザーにアクティビティインジケータ(メインスレッド上)を引き続き表示できます。あなたのXMLが解析されている間、あなたのUIはロックされません。