iOS - MBProgressHUD - JSON Asynch调用 - 应用程序代理

时间:2013-12-18 09:55:27

标签: ios json nsurlconnection mbprogresshud

我正在创建一个有一些Json调用的应用程序。为此,我在应用程序委托类中创建了一个执行这些调用的新方法。从我的应用程序的不同视图控制器调用此方法。我想在每次通话时使用MBProgressHUD。所以我使用异步调用来检索Json数据并使用MBProgressHUD。

  1. 显示MBProgressHUD
  2. Asynch NSURLConnection Call
  3. 获取数据(和隐藏MBProgressHUD)
  4. 做其他人的行动。
  5. 问题在于,在步骤4中,Json响应为空。有一种方法可以测试步骤2和3是否已完成?

    我必须使用异步调用,因为我正在使用MBProgressHUD。

     [MBProgressHUD showHUDAddedTo:view animated:YES];
        dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
            NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:linkChiamata]];
            // NSData* data;
            NSArray* json;
            json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            jsonResponse = [json objectAtIndex:0];
    
            dispatch_async(dispatch_get_main_queue(), ^{
                [MBProgressHUD hideHUDForView:view animated:YES];
            });
        });
    
    
        //Esito chiamata JSON
        int esitoChiamata;
        esitoChiamata = [[jsonResponse objectForKey:@"codice"] intValue];
    

    jsonResponse对所有来电都是空的。

    提前致谢。

2 个答案:

答案 0 :(得分:0)

在执行其他操作之前,需要等到NSURLConnection委托成功/失败方法被调用。

您能否提供有关如何进行NSURLConnection调用的更多信息? Here's one way to do it.

答案 1 :(得分:0)

我认为有两种可能性。

  • 您可以使用NSCondition阻止线程并等待条件再继续。一个简单的例子是here,很容易适应您的解决方案。
  • 使用肤色块创建在后台运行的函数。 See my answer here

希望它会对你有所帮助。