【问题标题】:iOS - MBProgressHUD - JSON Asynch call - Application DelegateiOS - MBProgressHUD - JSON 异步调用 - 应用程序委托
【发布时间】:2013-12-18 09:55:26
【问题描述】:

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

  1. 显示 MBProgressHUD
  2. 执行异步 NSURLConnection 调用
  3. 获取数据(并隐藏 MBProgressHUD)
  4. 做其他操作。

问题是在第 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 对于所有调用都是空的。

提前致谢。

【问题讨论】:

    标签: ios json nsurlconnection mbprogresshud


    【解决方案1】:

    您需要等到调用 NSURLConnection 委托成功/失败方法后,才能进行其他操作。

    你能提供更多关于你如何调用 NSURLConnection 的信息吗? Here's one way to do it.

    【讨论】:

      【解决方案2】:

      我认为有两种可能。

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

      希望对你有所帮助。

      【讨论】:

      • dispatch_asynch 中的代码是顺序的,dataWithContentsOfURL 是同步请求。所以在这个异步块中,你不会在之前的代码完成之前执行[MBProgressHUD hideHUDForView:view animated:YES];。您确定要从dataWithContentsOfURL 检索任何数据吗?
      • 是的,我从 dataWithContentsOfURL 检索数据,但我有一个异步调用,所以当我使用 jsonResponse 时,我得到一个空对象。我想我的电话还没有结束。
      • 是的,此时您的呼叫尚未完成,因为您从后台线程检索您的 json(而且优先级较低)。如果没有问题,我建议您在第一个 dispatch_async 块的末尾(第二个 dispatch_async 块之后)包含最后两行
      • 麻烦了。在最后 2 行之后,我的代码可以处理以前的数据(例如 esitoChiamata)。
      • 所以你可以考虑添加NSConditions 来阻塞你的线程,直到你的后台线程解锁它。
      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多