0

JSONデータをフェッチしてデコードしようとしていますが、同時にUIActivityIndicatorand UILabel(@ "searching ...")を表示するビューを再表示して、アプリが検索していることをユーザーに知らせます。

これがどのように機能するかは次のとおりです。

  1. ユーザーが「検索ボタン」を押す
  2. IBActionメソッドは、検索ビューを再表示し、データを同時にフェッチしてデコードします (これらは一緒にではなく、個別に行うことができます)。
  3. [self performSegueWithIdentifier:]検索が完了した後に使用して、新しいビューをスタックにプッシュします。

私はdispatch_queueを使用してみましたが、それを行うと、他のコードを完全にバイパスせずに新しいビューをスタックにプッシュすることはできません(少なくとも私が行っていた方法)。を使用するように言われNSConnectionましたが、API を調べたところ、それを使用してこれを達成する方法がわかりません。

dispatch_queue_t myQueue = dispatch_queue_create("myQueue", NULL);

dispatch_async(myQueue, 
^{ 
    //...URL Request, parse JSON, etc.

    dispatch_async(dispatch_get_main_queue(), 
    ^{
        searchingView.hidden = NO;
        [spinner startAnimating];

      });
 });

 [self performSegueWithIdentifier:@"aSegue"];

この方法では、すべてのコードがスキップされ、すぐにセグエが実行されます。コードの残りの部分と一緒に dispatch_queue 内に配置すると、コードは実行されますが、セグエは実行されません。最後に、このメソッドを使用して、最初に検索を実行し、次にビューを表示します。私は反対が必要です。

どんな助けでも大歓迎です!

4

1 に答える 1

2

作業をディスパッチする前に検索ビューを表示し、JSON が読み取られて解析された後、メイン キューへのディスパッチを使用してセグエを実行します。

searchingView.hidden = NO;
[spinner startAnimating];

dispatch_async(myQueue, ^{ 
    //...URL Request, parse JSON, etc.

    dispatch_async(dispatch_get_main_queue(), ^{
         [self performSegueWithIdentifier:@"aSegue"];
    });
});
于 2013-01-14T18:06:58.427 に答える