我想这对Google来说真的是一个功能请求,但我很好奇是否有人知道如何解决问题。我想对GAE端点api执行同步查询请求。
在Android中执行请求是同步的。然后将它放入AsyncTask中以使其在后台运行。
在iOS中,执行请求是异步的。你只需传入一个回调块。
我正在将Android应用转换为iOS应用,如果他们使用相同的机制,那将非常好。例如,有时我想要同步查询。它只是使我的代码更容易,我知道把它放在后台线程上。
所以我的问题是这个......在iOS查询完成之前,有什么办法(hacky或者没有)阻止?
答案 0 :(得分:4)
您可以使用与此类似的代码等待调用以超时完成代码。显然,您不希望在UI线程上执行此操作,但这将确保您的完成处理程序以串行方式运行。
NSLog(@"Before API Call");
GTLServiceTicket *apiCall = [apiService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
GTLHelloworldHelloGreeting *object,
NSError *error) {
NSLog(@"Starting completion handler");
NSArray *greetings = [NSArray arrayWithObjects: object, nil];
greetingsRetrievedFromAPI = greetings;
[self performSegueWithIdentifier: @"DisplayGreetings" sender: self];
NSLog(@"Ending completion handler");
}];
[apiService waitForTicket:apiCall timeout:100000 fetchedObject:nil error:nil];
NSLog(@"After completion handler");