0

我正在尝试获取 JSON 数据并对其进行解码,同时取消隐藏显示UIActivityIndicatorUILabel(@"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"];

这种方式跳过所有代码并立即执行segue。如果我将它与其余代码一起放在 dispatch_queue 中,它会执行代码,但不执行 segue。最后,使用此方法,它首先执行搜索,然后显示视图。我需要相反的。

任何帮助是极大的赞赏!

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 回答