0

アプリで ECSlidingViewController を使用しています。UITableView を含む View Controller があり、UIRefreshControl を使用して長いタスクを実行します。プルダウンして更新すると、更新コントロールは正常にアニメーションを開始しますが、トップ ビュー コントローラー (この場合はメイン メニュー) に移動してからビュー コントローラーに戻ると、refreshControl はタスクが完了するまで完全にフリーズします。

より明確にするために、これらは私が従う手順です:

  1. tableView をプルダウンして更新します。
  2. 次のような長いタスクがバックグラウンドで実行されます。

    - (void)pulledToRefresh:(UIRefreshControl *)refreshControl
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
            long long a = 0;
            for (long long i = 0; i < 100000000000; i++) {
                a++;
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                [refreshControl endRefreshing];
            });
        });
    }
    
  3. 更新コントロールがアニメーション化されている間、現在のビュー コントローラーを右にスライドさせて(メソッドやそれらのいずれも呼び出しませんresetTopView:animated:。パン ジェスチャを行います)、メイン メニューを表示します。これが発生すると、更新コントロールが突然アニメーションを停止します (フリーズします)。

  4. 最初に使用していたView Controllerに戻りますが、フリーズしたままです。

  5. タスクが完了し、更新コントロールが自然に更新を終了し、素敵なアニメーションで tableView から削除されます。

なぜこれが起こるのか分かりますか?

4

1 に答える 1