如何取消 [GMSPlacesClient autocompleteQuery] 中正在进行的请求?
How can I cancel an ongoing request in [GMSPlacesClient autocompleteQuery]?
我想为我的应用程序添加自动完成功能。
我的想法是使用 GMSPlacesClient class 中的 autocompleteQuery:bounds:filter:callback。
当用户输入时,我想调用该方法,但我想如果我发送多个请求,我可能会无序地收到响应。出于这个原因,我想取消当前的,但我没有办法。
也许它是在内部实现的,我不知道。
有什么帮助或建议吗?非常感谢。
我意识到回复可能会乱序。我创建了一个带有文本字段和一个 table 的小样本。
每当用户点击一封信时,我都会发送一个请求,结果显示没有自动请求取消或订单。
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 中,我们将有一个 class 负责管理这些请求并以正确的顺序返回它们。
同时,您可以通过跟踪请求进入的顺序并忽略太旧的响应来管理这些请求:
@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
}];
}
不是最好的,但在我们发布更好的方法之前它应该可以工作:)
我想为我的应用程序添加自动完成功能。 我的想法是使用 GMSPlacesClient class 中的 autocompleteQuery:bounds:filter:callback。 当用户输入时,我想调用该方法,但我想如果我发送多个请求,我可能会无序地收到响应。出于这个原因,我想取消当前的,但我没有办法。 也许它是在内部实现的,我不知道。 有什么帮助或建议吗?非常感谢。
我意识到回复可能会乱序。我创建了一个带有文本字段和一个 table 的小样本。 每当用户点击一封信时,我都会发送一个请求,结果显示没有自动请求取消或订单。
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 中,我们将有一个 class 负责管理这些请求并以正确的顺序返回它们。
同时,您可以通过跟踪请求进入的顺序并忽略太旧的响应来管理这些请求:
@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
}];
}
不是最好的,但在我们发布更好的方法之前它应该可以工作:)