2017-07-19 6 views
0

イブニング:スウィフト:非同期のWebタスクとアクティビティインジケータ、私は次のような問題を持っている

問題

私のアプリは、ウェブベースのアプリケーションです。 APIからデータをダウンロードし、別のtableViewsで結果を表示することができます。

ランディングページが読み込まれると、アプリはデータのダウンロードを開始します。データは、多くの非同期タスクを介してダウンロードされます。

私は、activity indicatorを示すデータがすべてダウンロードされるまで、はアプリを使用できません。

私は、ページがロードされると即座にアクティビティインジケータを表示し、非同期クロージャが呼び出されたときにアクティビティインジケータを表示すると考えていました。

問題は、5つの非同期関数のようになり、すべての非同期タスクは他の非同期タスクになります。

だから、非同期実行中のタスクがある場合を理解する方法がある、とイエスの場合:がない場合は、インジケータを示しています。インジケータを停止?

または、これを達成するためのより良いデザインパターンがありますか?すべてのあなたの要求を管理しても、一つ一つのために取り扱いとは異なるエラーを実行し、ショーやロードを非表示にすることができ、これにより

Promise Kit

:あなたは非同期の多くを持っているので

+1

「DispatchGroup」を使用してください。 – rmaddy

+0

https://stackoverflow.com/questions/28100847/checking-for-multiple-asynchronous-responses-from-alamofire-and-swiftおよび他の同様の質問を参照してください。 Alamofireの使用は無関係です。実際の非同期タスクに必要なものを使用します。 – rmaddy

答えて

0

ソリューション

@rmaddyは私がGroupDispatchオブジェクトを作成したすべてのGroupDispatch

まず使用を示唆しているように。

すべての非同期コールではgroupDispatchオブジェクトをparameterとして渡しました。関数内ではgroup.enter()を使用していましたので、関数が呼び出されるたびにグループ内に入ります。 私は閉鎖中にgroup.leave()メソッドを使用しました。

最後にすべての非同期呼び出しが完了したときに通知するためにgroup.notifyを使用しました。

これは完全に機能します。

0

、あなたは約束キットを使用する必要がありますあなたが望むときは常にインジケータを

+0

お返事ありがとうございます。しかし、私は外部のライブラリを使用したくないです –

+0

あなたはそれぞれのタスクが1つの投票権を持ち、すべてが投票したときにあなたのHUDを隠すことができる "投票"を実装することができます。 – GIJOW

関連する問題