在NSOperation中取消NSData initWithContentsOfURL

我目前有一个NSOperation有keyPath“isCancelled”的观察员下面的代码:

downloaded = FALSE; NSURL *url = [NSURL URLWithString:requestString]; dataXML = [[NSData alloc] initWithContentsOfURL:url]; downloaded = TRUE; 

我想这样做的是,那么obserValueForKeyPath函数可以取消继续dataXML,或只是完全停止NSOperation一旦NSOperation发送取消消息。 NSOperation的取消操作取消只是通知操作应该停止,但不会强制我的操作代码停止。

你不能取消它。

如果您希望能够在中途取消负载,请使用以asynchronous模式运行的NSURLConnection 。 这需要更多的工作来设置,但是您可以在下载过程中随时取消。

或者,你可以使用这个方便的类,我写了一个asynchronousNSURLConnection和它的委托包装在一个单一的方法调用;-)

 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>

请注意,上面的请求已经是asynchronous的,并且该类已经pipe理多个请求的排队,所以你不需要(也不应该)把它包装在一个NSOperationQueue