NSURLConnection异步线程连接闭包

时间:2014-06-27 12:01:28

标签: ios iphone objective-c nsurlconnection

我使用NSURLConnection从主线程中分离的线程中从Internet获取一些数据: 我把它放在我的 JSONViewController.h 中:

#import <UIKit/UIKit.h>

@interface JSONViewController : UIViewController <NSURLConnectionDelegate> {
   BOOL firstTime;
   NSMutableData *_responseData;
}
@end

我使用此代码在 JSONViewController.m 中启动连接:

NSURLRequest *request;
 if (self.jsonItem == nil) {
        request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",MY_URL,@"testvalue"]]];
  }else {
        request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",MY_URL,(NSString *)self.jsonItem]]];
  }
  NSLog(@"json Item = %@",self.jsonItem);


  // Create url connection and fire request
  NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

我还实现了与NSURLConnection协议相关的那些函数:

#pragma mark NSURLConnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    _responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [_responseData appendData:data];
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse*)cachedResponse {
    return nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {}

一切都运作良好。 问题是:在得到结果并且连接完成后,为什么我仍然会在导航栏上方的载体区域附近看到这个小指示器?我应该手动停止连接吗?

enter image description here

3 个答案:

答案 0 :(得分:2)

在代码中的某处,您应该找到类似的内容:

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;

将状态栏的活动指示器设置为“打开”。 加载完成后,您需要再次关闭它。通过以下方式这样做:

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;

如果您一次只下载多个文件,则只需将这两行添加到connectionDidFinisLoadingdidFailWithError方法实现中。

答案 1 :(得分:1)

您可以通过这条简单的线

隐藏它
  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

答案 2 :(得分:1)

在start方法中,放置函数方法:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

...并在结束时放入connectionDidFinisLoadingconnectiondidFailWithError

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

希望这有帮助!