3

ユーザー インターフェイスをロックせずにバックグラウンドでデータベース フェッチ プロセスを実行しようとしています。

現在、これを行うボタンがありますが、ユーザーが現在の結果を閲覧しているときに、より多くの結果を取得できるように自動化したいと考えています。

ボタンが実行するコードは次のとおりです。これを自動化し、UI をロックしないようにしたいと思います。また、プロセスを一時停止する方法があれば、ユーザーが別の画面に移動した場合に中断したところから続行することも非常に便利です。

前もって感謝します!

-(IBAction)continueUpdatingResultsButtonPressed:(UIButton*)sender{
[findMoreButton removeFromSuperview];
[self continueFindingMoreRecipes]; //(do this in background without locking screen)
[self loadRefreshButton];//At completion load this button (a blinking button) to refresh the cells with new results

}

4

4 に答える 4

6

使用できる典型的なパターンは次のようなものです。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // perform data processing here (done in the background)

    dispatch_async(dispatch_get_main_queue(), ^{
        // update user interface here (done on the main thread)
    });
});
于 2012-11-20T03:01:22.667 に答える
2

グランドセントラルディスパッチを使用してください。新しいキューを作成し、ブロックでディスパッチし、更新する必要がある場合は、ディスパッチ get メイン キューを呼び出します。ただし、キューがディスパッチされると、これを一時停止する方法はありません。レシピを仲介にロードして、必要に応じて更新するかもしれません。

まともなチュートリアルがいくつかある gcd チュートリアルを探してください。

より多くのコードを提供しますが、私は iPhone で入力しています。

于 2012-11-20T03:03:30.183 に答える
2

UI が現在の終了の Y を取得するたびに、次の X 量の回答をキャッシュするバッチ リクエストを実行できます。使用しているものに応じて、多くのデータベースには、バッチ キャッシュを簡単に行うのに役立つプロトコルがあります。幸運を!

于 2012-11-20T02:11:06.137 に答える
0

バックグラウンド キューでデータをプリフェッチするためにGCDを追求するのは賢明ではないかもしれないと思います (特に、あなた自身の承認により、「プログラミングに非常に慣れていない」ので) 、バックグラウンド キューのデータベース操作をフォアグラウンドのデータベース操作と調整するようにしてくださいデータベース操作(おそらくFMDBまたは同等のものを介して)、他の画面に移動するときにこの操作を一時停止し(質問で示したように)、プロセスで保持サイクルが発生しないように適切に処理します。FMDatabaseQueue

さらに悪いことに、これはすべて、バックグラウンドで 10,000 のレシピを取得するという、疑わしい可能性のある目標を追求していると私は推測しています。誤解しないでください。確かに、ここで概説したようにすべてのバックグラウンド操作を設計できますが、立ち止まって、それがビジネス上の問題に適した設計であるかどうかを自問する必要があると思います。

無限に簡単な解決策を提案するかもしれません。テーブルビューに最初のxレシピをロードするだけで、ユーザーが下にスクロールし、テーブルビューの終わりに近づき始めたら、その事実を検出し、次のxレコードを取得してテーブルビューに追加します。しかし、ユーザーが 10,000 エントリをめくることを期待するユーザー インターフェイスは、臭いテストに合格しません。10,000 エントリのデータベースについて考えるとき、連絡先スタイルのユーザー インターフェイスではなく、imdb/wikipedia/google/facebook に似たユーザー インターフェイスを思い浮かべます。

とにかく、アプリがバックグラウンドで無限にレシピを取得することはほぼ確実に望ましくありません。UI パフォーマンスの問題は解決できますが、メモリ管理の問題に置き換えることができます。複雑なシステム アーキテクチャを設計することになるのは、レシピ アプリでそれが必要かどうかが完全に明確でない場合です。

于 2012-11-20T03:43:58.213 に答える