我使用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 {}
一切都运作良好。 问题是:在得到结果并且连接完成后,为什么我仍然会在导航栏上方的载体区域附近看到这个小指示器?我应该手动停止连接吗?
答案 0 :(得分:2)
在代码中的某处,您应该找到类似的内容:
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
将状态栏的活动指示器设置为“打开”。 加载完成后,您需要再次关闭它。通过以下方式这样做:
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;
如果您一次只下载多个文件,则只需将这两行添加到connectionDidFinisLoading
和didFailWithError
方法实现中。
答案 1 :(得分:1)
您可以通过这条简单的线
隐藏它 [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
答案 2 :(得分:1)
在start方法中,放置函数方法:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
...并在结束时放入connectionDidFinisLoading
和connectiondidFailWithError
:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
希望这有帮助!