如何让函数在AFHTTPRequestOperation完成后返回

我想要的function不会返回,直到AFHTTPRequestOperation完成,但我不知道该怎么做,在此先感谢。

 -(BOOL)download { BOOL ret = TRUE; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { ret = [self handle:data]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Failure: %@", error); }]; [operation start]; return ret ; } 

你的devise是不正确的。

AFHTTPRequestOperation是asynchronous的,所以你不能(也不应该)以同步的方式处理它。 您必须修改您的工作stream程才能使用AFHTTPRequestOperation的完成或失败块。

由于AFNetworking是asynchronous的,这是不可能的。 使用asynchronous请求时,应始终在成功/完成块中调用您的完成代码。

如果你解释你在哪里使用下载方法,为什么你需要知道什么时候完成,我可以帮助解释/帮助你更好地devise它。

我会同意上面的其他人一般你应该坚持AFNetworkingasynchronous本性,但也有办法引起伪同步代码运行AFNetworking请求。

使用你的例子下面的代码应该工作。

 -(BOOL)download { BOOL ret = TRUE; __block BOOL complete = NO; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { ret = [self handle:data]; complete = YES; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Failure: %@", error); complete = YES; }]; [operation start]; while(complete == NO) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; } return ret; } 

我发现这种用法对unit testingAPI特别有用。 如果您只需要进行API调用即可访问要testing的调用,则嵌套会变得非常烦人。 这是一个漂亮的工具来解决这个问题。