2016-08-18 5 views
1

私のプロジェクトは要素を表形式で表示します。ユーザーがセルをクリックすると、セルが展開されて(App Storeの更新タブのように)詳細情報が表示され、ユーザーがその拡張セルをタップすると、セル内で参照されている要素が新しいページで開きます(App Store )。ただし、その要素を表示するには、その前にAlamofireリクエストを使用してダウンロードする必要があります。速度を上げるために、要素を開くことを決定したときにセルが展開されたときに要素のダウンロードを開始しています。既にダウンロードが完了している可能性があります。Alamofireを使用してダウンロードした後、セグを待つ間にユーザーのやりとりを処理する

ただし、いくつかの要素がすぐにダウンロードされるため、ユーザーが要素を開くときにダウンロードされる可能性が高い(第2タップ)。しかし、いくつかの要素ははるかに大きく、ダウンロードに時間がかかります(最大6秒)。要素のダウンロードがまだ完了していない場合は、ユーザー入力をどのように処理する必要がありますか、さらに実装する方法は?

最も簡単な方法は、ユーザーの入力を完全に無視して、要素が各タップでダウンロードしてセグを開始したかどうかを確認することでした。しかし、ユーザーを無視して同じ意図で複数回タップしなければならないのは間違いです。同様に、メインスレッドではdispatch_group_wait()を使用しましたが、すべての入力をブロックするため、さらに悪化します。私が達成したい何

は次のとおりです。

  1. まずタップ:ダウンロード要求を開始し、変数でそれを維持する(それがすでに行われています)。

  2. 第2のタップならば、我々はまだ知らないので、私は、要求のcompletionHandlerでセグエを起動する必要はありません。要素がダウンロードされている場合は、セグを起動して開きます。

    b。要素がまだダウンロードを完了していない場合は、ダウンロードの最後にセグの開始を延期します。

この質問は非常に大きいので、それを絞り込むことができます。前述のロジックを実装することは可能ですか?どうやって?

答えて

1

shouldPerformSegueWithIdentifier:機能を使用して、セグをキャンセルできます。

この機能を実装し、アイテムがまだダウンロードされていない場合はセグレットをキャンセルし、ダウンロード完了ハンドラが確認できるフラグも設定します。

ダウンロードが完了すると、フラグが設定されている場合、完了ハンドラはセグを実行できます。

ユーザーは、データが

+0

はそんなにありがとうロード中であることを知っているように、あなたはおそらくも活動の指標のいくつかの並べ替えを示すべきです!私は簡単な方法があることを知っていましたが、私は間違った側から問題を見ていましたが、閉鎖とAlamofireだけに焦点を当てました。私はすでに私の以前の試みのためのフラグと活動指標を実装しましたが、あなたの答えは私のパズルの欠けている部分です;)乾杯 –

関連する問題