2010-01-24 30 views
4

我有一个NSURLConnection工作正常,当我允许加载完成。但是,如果用户点击后退按钮,这意味着webview将消失,我想取消正在进行的NSURLConnection。但是,如果有web视图调用这个类时viewWillDissapear被调用,然后我做的:创建和取消NSURLConnection

[conn cancel] 

我得到一个NSINValidArgument例外。

NSURLConnection *conn; 

异步从这里开始:

连接在.h文件中定义的实例数据

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:articleURL]]; 

    if ([NSURLConnection canHandleRequest:request] && reachable) { 
     // Set up an asynchronous load request 
     conn = [NSURLConnection connectionWithRequest:request delegate:self]; 
     loadCancelled = NO; 
     if (conn) { 
      NSLog(@" ARTICLE is REACHABLE!!!!"); 
      self.articleData = [NSMutableData data]; 
     } 
    } 

回答

11

为什么你得到了例外是要保存的原因一个autorelease对象给一个实例变量。
当用户点击返回按钮时,“conn”会立即自动释放。之后,你打电话取消。因此,你有例外。
为了防止出现这种情况,您应该在将它保留在实例变量中时保留NSURLConnection对象。

conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain]; 

conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

不要忘记在dealloc方法释放此。

+0

这样做。有更多的学习重新管理。谢谢。 – 2010-01-24 06:13:54

+0

我很高兴能帮上忙。 – tomute 2010-01-24 06:16:36