2

我正在为我的 iOs 应用程序使用 AFNetworking。我需要像许多其他应用程序或网站上的搜索栏一样实施搜索建议。因此,基本上启动 GET 请求,但在用户点击新字符时取消旧请求。我怎样才能做到这一点?我有一个 AFHTTPClient 子类,我正在使用 getPath。最好的办法是让这些请求可取消,并优先于我的单例 AFHTTPClient 子类上的任何其他 HTTP 请求。提前致谢。

4

2 回答 2

1

只需在您的 AFHTTPClient 中使用此方法

- (void)cancelHTTPOperationsWithMethod:(NSString *)method andURL:(NSURL *)url

如果您在 AFHTTPClient 子类上有一个单例,则示例:

[[MHHTTPClient sharedHTTPClient] cancelHTTPOperationsWithMethod:@"GET" andURL:[NSURL URLWithString:@"http://www.mysite.com/autocomplete.json?search=tes"]];
于 2011-12-21T13:49:47.123 回答
0

我相信当您尝试创建基于特定服务的应用程序时,AFNetworking 中最好的 HTTPClient 会被使用,这将向同一主机上的不同路径发出请求。

对于这样的东西,我会使用普通的 AFHTTPRequestOperation,这是可以取消的。我会制作一个包含 AFHTTPRequestOperation 的包装类。然后,在每次用户按下时,我都会在 http 请求(和我的包装器)上调用“取消”,然后在同一个地方创建一个新请求,并发出新请求。这就是我已经在我的应用程序中实现它的方式,并且效果很好。

不过要小心。AFNetworking 很大程度上基于 NSOperation 块,当调用 cancel 时,您必须确保 NSOperation 的完成块不会被调用(或者至少在它被调用后会立即返回)。即使取消操作,完成块仍有可能被调用,从而造成内存泄漏和难以跟踪的错误。最好的办法是创建一个完成块并在继续之前检查操作是否被取消。

于 2011-12-21T13:24:04.853 回答