我目前在NSOperation中有以下代码,它有一个keyPath“isCancelled”的观察者:
downloaded = FALSE;
NSURL *url = [NSURL URLWithString:requestString];
dataXML = [[NSData alloc] initWithContentsOfURL:url];
downloaded = TRUE;
我想这样做,以便在NSOperation发送取消消息后,observeValueForKeyPath函数能够取消dataXML继续或完全停止NSOperation。 NSOperation的取消操作取消仅通知操作它应该停止,但不会强制我的操作代码停止。
答案 0 :(得分:7)
你不能取消它。
如果您希望能够在中途取消加载,请使用在异步模式下运行的NSURLConnection
。设置还需要做一些工作,但您可以在下载过程中的任何时候取消。
或者,您可以使用this handy class我编写的包含异步NSURLConnection
及其委托的单个方法调用; - )
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[RequestQueue mainQueue] addRequest:request completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (data && error == nil)
{
//do something with your downloaded data
}
}];
//to cancel the download at any time, just say
[[RequestQueue mainQueue] cancelRequest:request];
容易!
</shamelessSelfPromotion>
请注意,上面的请求已经是异步的,并且该类已经管理了多个请求的排队,因此您不需要(也不应该)将其包装在NSOperationQueue
中。