在iOS上执行对Google云端点的同步查询

在iOS上执行对Google云端点的同步查询,ios,google-app-engine,google-cloud-endpoints,Ios,Google App Engine,Google Cloud Endpoints,我想这确实是对谷歌的一个功能要求,但我很好奇是否有人知道这方面的工作。我想对GAE端点api执行同步查询请求 在Android中,执行请求是同步的。然后将其放入异步任务中,使其在后台工作 在iOS中,执行请求是异步的。您只需传入一个回调块 我正在将Android应用程序转换为iOS应用程序,如果他们使用相同的机制,那就太好了。例如,有时我需要一个同步查询。它只是使我的代码更容易,我知道把它放在后台线程 所以我的问题是。。。在iOS查询完成之前,是否有任何方法(黑客或非黑客)阻止?您可以等待通话结

我想这确实是对谷歌的一个功能要求,但我很好奇是否有人知道这方面的工作。我想对GAE端点api执行同步查询请求

在Android中,执行请求是同步的。然后将其放入异步任务中,使其在后台工作

在iOS中,执行请求是异步的。您只需传入一个回调块

我正在将Android应用程序转换为iOS应用程序,如果他们使用相同的机制,那就太好了。例如,有时我需要一个同步查询。它只是使我的代码更容易,我知道把它放在后台线程


所以我的问题是。。。在iOS查询完成之前,是否有任何方法(黑客或非黑客)阻止?

您可以等待通话结束,并使用类似于此的代码超时。显然,您不希望在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");

在主线程上发出对
executeQuery
的调用后(我也从
NSOperationQueue
)等待条件并在完成处理程序中发送信号,我尝试了类似的操作。但是,这会阻塞主线程。
waitForTicket:
是唯一的出路吗?例如,是否总是在主线程上调用完成处理程序?您是否发现了这一点?多年前,我们为代码设计了一个黑客锁定技巧。它对我们有用,但都是Objective-C。如果您需要代码片段,请告诉我。谷歌现在已经弃用Endpoints 1.0,并将于2018年8月2日关闭它。尚未研究Endpoints 2.0(他们正式称之为AppEngine的云端点框架)。有关终结点1.0关闭的信息: