我正在为我的iOs应用程序使用AFNetworking。 我需要在网站上的许多其他应用或搜索栏中实施搜索建议。 因此,基本上启动GET请求,但在用户点击新字符时取消旧请求。 我怎样才能做到这一点?我有一个AFHTTPClient子类,我使用的是getPath。 最好的方法是将此请求取消并“优先”到我的单例AFHTTPClient子类上的任何其他HTTP请求。 提前谢谢。
答案 0 :(得分: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"]];
答案 1 :(得分:0)
我相信当您尝试基于特定服务创建应用程序时,会使用AFNetworking中最好的HTTPClient,这会向同一主机上的不同路径发出请求。
对于这样的东西,我会使用可取消的普通AFHTTPRequestOperation。我会在里面创建一个包含AFHTTPRequestOperation的包装器类。然后,在每个用户按下时,我会在http请求(和我的包装器)上调用'cancel',然后在同一个地方创建一个新的,并发出新的请求。这就是我已经在我的应用程序中实现它的方式,它运行正常。
但要小心。 AFNetworking是基于NSOperation块的,当调用cancel时,你必须确保不会调用NSOperation的完成块(或者至少在调用后立即返回)。即使取消操作,仍有可能仍会调用完成块,从而造成内存泄漏并且难以跟踪错误。最好的办法是创建一个完成块,并在继续之前检查操作是否被取消。