Ios 在NSOperation中取消NSData initWithContentsOfURL

Ios 在NSOperation中取消NSData initWithContentsOfURL,ios,nsdata,nsoperation,Ios,Nsdata,Nsoperation,我目前在一个NSOperation中有以下代码,其中有一个keyPath“isCancelled”的观察者: 我想让observeValueForKeyPath函数能够取消dataXML,或者在NSOperation发送cancel消息后完全停止NSOperation。NSOperation的Canceling operation cancel仅通知操作它应该停止,但不会强制我的操作代码停止。您不能取消它 如果希望能够中途取消加载,请使用异步模式下运行的NSURLConnection。这是一个多

我目前在一个NSOperation中有以下代码,其中有一个keyPath“isCancelled”的观察者:

我想让observeValueForKeyPath函数能够取消dataXML,或者在NSOperation发送cancel消息后完全停止NSOperation。NSOperation的Canceling operation cancel仅通知操作它应该停止,但不会强制我的操作代码停止。

您不能取消它

如果希望能够中途取消加载,请使用异步模式下运行的
NSURLConnection
。这是一个多一点的工作,以设置,但你可以取消在任何时候在下载过程中

或者,您可以使用我编写的将异步
NSURLConnection
及其委托包装在单个方法调用中的方法;-)

轻松点

请注意,上面的请求已经是异步的,并且该类已经管理了多个请求的队列,因此您不需要(也不应该)将其包装在一个
NSOperationQueue
中,您不能取消它

如果希望能够中途取消加载,请使用异步模式下运行的
NSURLConnection
。这是一个多一点的工作,以设置,但你可以取消在任何时候在下载过程中

或者,您可以使用我编写的将异步
NSURLConnection
及其委托包装在单个方法调用中的方法;-)

轻松点


请注意,上面的请求已经是异步的,并且该类已经管理了多个请求的队列,因此您不需要(也不应该)将其包装在一个有意义的
NSOperationQueue

中,但下载完成后,没有什么可以阻止您从成功块内部启动单独的XML操作。我的意思是你不应该在你的NSOperatiom中自己做请求,因为从另一个线程中产生一个线程只是浪费资源。尽管如果您愿意,您可以为每个NSO操作创建一个新的RequestQueue实例,因为mainQueue共享实例不是线程安全的。谢谢!!!!你的代码真的帮助了我:我有近500mb(老实说)大小的TIFF,现在我可以取消错误启动的加载!这很有道理,但下载完成后,没有什么可以阻止您从成功块内部启动单独的XML操作。我的意思是你不应该在你的NSOperatiom中自己做请求,因为从另一个线程中产生一个线程只是浪费资源。尽管如果您愿意,您可以为每个NSO操作创建一个新的RequestQueue实例,因为mainQueue共享实例不是线程安全的。谢谢!!!!你的代码真的帮助了我:我有近500mb(老实说)大小的TIFF,现在我可以取消错误启动的加载!明亮的
    downloaded = FALSE;
    NSURL *url = [NSURL URLWithString:requestString];
    dataXML = [[NSData alloc] initWithContentsOfURL:url];
    downloaded = TRUE;
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];