0

我正在使用 AFJSONRequestOperation 为移动应用程序使用 Objective-C 实现 HTTP 请求,并且在满足条件之前我不知道如何实现循环(即 JSON 中的 profiling_status 键的值为 1)。按下按钮时会运行请求。服务器在后台进行一些需要一段时间的计算。在服务器完成之前,profiling_status 值为 2。当它完成时,值为 1。所以,我想保持循环,直到值变为 1,然后显示 JSON。

在成功块中返回 JSON 会导致指针错误。在方法结束时返回 JSON 将返回 nil。

我有这个代码:

 - (IBAction)getProfileInfo:(id)sender
 {

    profiling_status = 2;
    NSDictionary *JSON;

    while (profiling_status == 2){
        JSON = [self getJSON];
        profiling_status = [JSON objectForKey:@"profiling_status"];
    }

    NSLog(@"JSON: %@", JSON);

  }

  - (NSDictionary*)getJSON
  {
      __block NSDictionary* JSONResult = nil;


      MyAPIClient *client = [MyAPIClient sharedClient];

      NSString *path = [NSString stringWithFormat:@"/profile?json"];
      NSURLRequest *request = [client requestWithMethod:@"GET" path:path parameters:nil];

      AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

            JSONResult = JSON;
            //can’t do this ---- return JSONResult;   

      } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id   JSON) {
        NSLog(@"%@", [error userInfo]);
      }];

      [operation start];

      return JSONResult; //will return nil

    }

有什么帮助吗?

谢谢你。

4

1 回答 1

1

您不能为此使用while循环(无论如何也不应该,因为它只会通过产生连接来杀死应用程序)。相反,您需要使用块来构造您的方法,以便运行请求的块检查结果并递归调用检查方法(最好在短暂延迟之后)或调用完成块。

还要考虑对迭代次数或所用时间进行计数,以便您可以中止处理。

于 2013-08-16T07:07:08.053 回答