正确处理[[NSURLConnection alloc] initWithRequest:...]

时间:2011-11-04 21:07:37

标签: objective-c ios nsurlconnection

这可能听起来像一个新手问题,但我是iOS开发新手。

我在导航控制器中推送了一个视图,在该视图中点击某个按钮,我运行以下代码。

mUploadeImageConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];
if (mUploadeImageConnection) {
    mUploadImageResponseData = [[NSMutableData data] retain];
} else {
[mUploadeImageConnection release];
}

我还实现了以下连接状态处理方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

当我发出mUploadeImageConnection请求时,需要一些时间来获得响应。但我不是在等待回复并按下导航后退按钮,即我正在弹出视图,但我仍然可以使四个连接处理功能正常工作,尽管mUploadeImageConnection请求发送到的视图弹出。如果didFailWithError我正在显示一些alertView,在这种情况下显示会很奇怪,即显示alerView关于某些已经弹出的视图(不可见/用户来到上一个视图)。

所以现在我的问题

  • 处理这种情况的最佳做法是什么?
  • 如何让我的四个功能停止?

1 个答案:

答案 0 :(得分:1)

如果要停止请求,请将NSURLConnection保留在变量中并调用

[myConnection cancel];

当用户点击后退按钮时。

例如,您可以使用委托方法

在导航控制器的委托中调用取消
– navigationController:willShowViewController:animated:

通过测试将要显示的viewController是否是你的rootViewController。