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

时间:2015-11-13 12:17:35

标签: ios8 google-places-api google-maps-sdk-ios

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

我意识到答案可能会失灵。我用文本字段和一个表创建了一个小样本。 我每次用户点击一封信时都会发出请求,结果表明没有自动请求取消或订单。

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服务并手动取消正在进行的请求。

1 个答案:

答案 0 :(得分:4)

我们在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
                      }];
}

不是最好的,但它应该有效,直到我们发布更好的方法:)