【发布时间】:2014-01-30 22:57:21
【问题描述】:
如果再次运行请求,我想停止/取消操作。方法cancelAllHTTPOperationsWithMethod 工作正常,但是当AFNetworking 已经获取结果并且我的successBlock 被解雇时我遇到了问题 - 我想在最近的将来停止它。但是问题是 operation.isCancelled 没有被取消。
问题是我是否必须在NSOperation 中执行我的“非常长的成功阻止”并取消它们,还是有任何更简单快捷的方法?
代码:
[[AFHTTPClient sharedInstance] cancelAllHTTPOperationsWithMethod:@"GET" path:@"path"];
[[AFHTTPClient sharedInstance] getPath:@"path" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
for (longLoop) {
// do something long
if (self.isCancelled) return; // this won't fire no matter how often i run it
}
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// do something to fail
}];
【问题讨论】:
-
你能在那个循环中测试
operation.isCancelled。你说“operation.isCancelled 没有被取消”,但这并不意味着什么。重点是,是set吗? -
@trojanfoe 好吧,这就是我的问题。我希望它会被设置,因为我之前调用了
cancelAllHTTPOperationsWithMethod(可以说我粘贴的代码在一个循环中),但是如果successBlock开始运行,那么即使我通过cancelAllHTTPOperationsWithMethod取消它,标志也不会'改变 -
那么为什么要测试
self.isCancelled呢? -
@trojanfoe 我想强调一下,这种方法不起作用。我在问该怎么做才能知道应该停止successBlock。有没有比将整个调度插入 NSOperation 并取消它更快的方法。
标签: ios objective-c afnetworking nsoperation