取消NSURLConnection Objective-C

时间:2011-11-10 15:01:55

标签: objective-c connection nsmutableurlrequest

我有一个tableview应用程序,当用户选择一个视图时,它需要解析一些XML来显示信息。但有时XML没有完成下载,用户可以按下按钮选择另一个视图,产生崩溃。我想我需要取消连接或不要引起新连接的任何混淆,但我不确切知道如何,它假设在ViewWillDisappear正确吗? 以下是我如何在ViewDidAppear上启动连接:

NSMutableURLRequest * req = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://Adress"]
                                                        cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];

conn = [NSURLConnection connectionWithRequest:req delegate:self];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

if(conn)
{
    receivedData = [[NSMutableData alloc]init];
    [DSBezelActivityView newActivityViewForView:self.view withLabel:@"Loading..."];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if(conn) [conn cancel];
}

2 个答案:

答案 0 :(得分:3)

您可以调用NSURLConnection的cancel方法,它将阻止您的连接委托被更多数据调用。您可以在viewWillDisappear中执行此操作,如果在您的应用程序如何工作时它是有意义的。

答案 1 :(得分:2)

绝对可以cancel NSURLConnection

但你也应该小心取消它。

如果您决定在cancelviewWillDisappear

然后

你不应该这样做,

autorelease

也不应该,

release它在任何地方。

以下简要说明:

cancel

NSURLConnection viewWillDisappear代表
[nsurlconnection cancel];

你也应该release在这里,

[nsurlconnection release];

如果您在收到connection之后的某个地方发布xml response

无论如何都会调用viewWillDisappear方法,

这里你取消它,然后它会导致你的应用程序崩溃。

  

“取消分配的对象不会被取消”

取消时还会出现另一种情况,

如果用户第一次来到并立即导航其他视图,则nsurlconnection方法将取消viewWillDisappear

用户再次来到view并在nsurlconnection初始化或分配之前立即转义,您的应用也会崩溃,因为,

  

“取消分配的对象不会被取消”。

因此,请在connection != nil之前检查cancel 而且也不要忘了做

nsurlconnection = nil;

在同一时间。

这样你就可以避免立即调用[nsurlconnection cancel]崩溃。

所以最后,在你的viewWillDisappear方法中,你必须做的是,

  
      
  1. 需要检查nsurlconnection!= nil
  2.   
  3. 需要取消
  4.   
  5. 需要为您的nsurlconnection
  6. 分配null   
  7. 需要以相同的方法释放它。
  8.   

示例代码如下所示

- (void) viewWillDisappear:(BOOL)animated
{

if (nsurlconnection != nil)
{
[nsurlconnection cancel];
[nsurlconnection release];
nsurlconnection = nil;
}

}

希望它有用......快乐的编码......