iOS - 多线程 - 使用搜索显示视图...并同时执行代码

时间:2013-01-14 17:02:18

标签: ios objective-c cocoa-touch

我正在尝试获取JSON数据并对其进行解码,同时取消隐藏显示UIActivityIndicatorUILabel(@“搜索...”)的视图,以便用户知道该应用是搜索。

以下是它应该如何运作:

  1. 用户点击“搜索按钮”
  2. IBAction方法取消隐藏搜索视图并同时提取和解码数据(我可以单独执行,而不是一起执行)。
  3. 在搜索完成后使用[self performSegueWithIdentifier:]将新视图推送到堆栈。
  4. 我已经尝试过使用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。最后,使用此方法,它首先执行搜索,然后显示视图。我需要相反的。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我会在调度工作之前显示搜索视图,并在读取和解析JSON之后使用调度到主队列来执行segue。

searchingView.hidden = NO;
[spinner startAnimating];

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

    dispatch_async(dispatch_get_main_queue(), ^{
         [self performSegueWithIdentifier:@"aSegue"];
    });
});