Ios8 如何在[GMSPlacesClient autocompleteQuery]中取消正在进行的请求?

Ios8 如何在[GMSPlacesClient autocompleteQuery]中取消正在进行的请求?,ios8,google-places-api,google-maps-sdk-ios,Ios8,Google Places Api,Google Maps Sdk Ios,我想在我的应用程序中添加自动完成功能。 我的想法是使用GMSPlacesClient类的autocompleteQuery:bounds:filter:callback。 当用户输入时,我想调用该方法,但我想如果我发送多个请求,可能会收到无序的响应。出于这个原因,我想取消当前的一个,但我没有办法。 也许它是在内部实现的,我不知道。 有什么帮助或建议吗?非常感谢 我意识到反应可能会出现问题。我创建了一个带有文本字段和一个表的小示例。 每次用户点击一封信,我都会发送一个请求,结果显示没有自动取消请求

我想在我的应用程序中添加自动完成功能。 我的想法是使用GMSPlacesClient类的autocompleteQuery:bounds:filter:callback。 当用户输入时,我想调用该方法,但我想如果我发送多个请求,可能会收到无序的响应。出于这个原因,我想取消当前的一个,但我没有办法。 也许它是在内部实现的,我不知道。 有什么帮助或建议吗?非常感谢

我意识到反应可能会出现问题。我创建了一个带有文本字段和一个表的小示例。 每次用户点击一封信,我都会发送一个请求,结果显示没有自动取消请求或订单

2015-11-13 15:16:14.668 TestGooglePlaces[5233:60b] u
2015-11-13 15:16:15.550 TestGooglePlaces[5233:60b] ut
2015-11-13 15:16:15.700 TestGooglePlaces[5233:60b] uto
2015-11-13 15:16:15.967 TestGooglePlaces[5233:60b] utop
2015-11-13 15:16:16.552 TestGooglePlaces[5233:60b] utopi
2015-11-13 15:16:23.035 TestGooglePlaces[5233:60b] Results for u
2015-11-13 15:16:23.079 TestGooglePlaces[5233:60b] Results for utop
2015-11-13 15:16:23.087 TestGooglePlaces[5233:60b] Results for utopi
2015-11-13 15:16:23.093 TestGooglePlaces[5233:60b] Results for ut
2015-11-13 15:16:23.155 TestGooglePlaces[5233:60b] Results for uto

我怎样才能解决这个问题?我唯一的想法就是使用REST web服务并手动取消正在进行的请求。

我们的Places API for iOS团队已经意识到这个问题,并正在解决这个问题。在SDK的下一个版本中,我们将有一个类负责管理这些请求并按正确的顺序返回它们

同时,您可以通过跟踪请求的发出顺序并忽略响应(如果响应太旧)来管理这些请求:

@implementation YourClass {
  NSUInteger _sequenceNumber;
  __block NSUInteger _mostRecentResponseNumber;
}

- (void)autocompleteQuery:(NSString *)query {
  NSUInteger thisSequenceNumber = ++_sequenceNumber;
  [_placesClient autocompleteQuery:query
                            bounds:nil
                            filter:nil
                          callback:^(NSArray * _Nullable results, NSError * _Nullable error) {
                            if (thisSequenceNumber <= _mostRecentResponseNumber) {
                              return;
                            }
                            _mostRecentResponseNumber = thisSequenceNumber;
                            // process results here
                      }];
}
@实现类{
NSU整数sequenceNumber;
__块整数_mostRecentResponseNumber;
}
-(void)自动完成查询:(NSString*)查询{
NSU整数thisSequenceNumber=++\u sequenceNumber;
[\u placesClient自动完成查询:查询
界限:零
过滤器:无
回调:^(NSArray*\u可为空的结果,NSError*\u可为空的错误){

如果(这个SequenceNumber实际上这是我的第一个想法,但我实现了一个NSOperation/NSOperationQueue,并且只在操作未取消时返回结果。当然,我在发送新请求/操作之前调用cancelAllOperations。我猜您的请求/操作更简单、更短。顺便说一句,GMSAutocompleteMatchFragment中存在内存问题粗体文本代码(它增长到无穷大)和网站中的一个示例代码中,您忘记了调用super viewDidLoad。非常感谢您的回复。很高兴您找到了解决方案!内存问题听起来像是我们应该解决的问题。您能在问题跟踪程序()上报告它吗?这将有助于我们进行诊断和优先级划分。接下来:我们刚刚发布了一个新版本的SDK,其中包含GMSAutocompleteFetcher类,它将为您解决此问题。请参阅网站上的文档,非常感谢!我将对此进行检查。