从 URL 获取数据时显示加载指示器的正确方法是什么
What is the proper way to display a loading indicator while getting data from a URL
我对 objective-c 有点陌生,我正在开发新闻 iOS 应用程序,该应用程序使用 JSON 从 url 解析获取其所有内容,我为此使用 AFNetworking
,这是我制作的方法:
- (void)getContents
{
NSString *urlString = @"http://some-url-that-has-json-output/";
urlString = [urlString stringByAppendingString:self.articleId];
NSLog(@"The call url is: %@",urlString);
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//AFNetworking asynchronous url request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"The JSON data is: %@", responseObject);
jsonContents = [responseObject objectForKey:@"article"];
[self LoadStructure];
} failure:nil];
[operation start];
}
现在使用此方法可以正常加载数据。
我的问题:如何在获取数据时显示加载指示器(可以是 GIF)?上面的这种方法是从 url 获取数据的正确方法还是最佳方法?
您可以使用 iOS(UIActivityIndicator) 的默认加载指示器。您应该在完成块之前开始对其进行动画处理,并且应该隐藏在成功和失败块中。
您应该创建一个使用指标作为 class 变量的方法:
indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.hidesWhenStopped = YES;
indicator.frame = CGRectMake(35, 15, 30, 30);
[self.view addSubview:indicator];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//AFNetworking asynchronous url request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[indicator startAnimating];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"The JSON data is: %@", responseObject);
// 停止:
[indicator stopAnimating];
jsonContents = [responseObject objectForKey:@"article"];
[self LoadStructure];
} failure::^(AFHTTPRequestOperation *operation, NSError *error){
[indicator stopAnimating];
}];
[operation start];
将 UIActivityIndicatorView
拖放到您的 XIB 视图中并将其与 IBOutlet 连接。
.h 文件
@property(nonatomic, strong)IBOutlet UIActivityIndicatorView * activityIndicator;
将 UIActivity 指示器视图添加到您的视图中。在
之前显示
NSString *urlString = @"http://some-url-that-has-json-output/";
使用:[self.activityIndicator startAnimating];
并在完成块和失败块中停止它
使用:[self.activityIndicator stopAnimating];
我对 objective-c 有点陌生,我正在开发新闻 iOS 应用程序,该应用程序使用 JSON 从 url 解析获取其所有内容,我为此使用 AFNetworking
,这是我制作的方法:
- (void)getContents
{
NSString *urlString = @"http://some-url-that-has-json-output/";
urlString = [urlString stringByAppendingString:self.articleId];
NSLog(@"The call url is: %@",urlString);
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//AFNetworking asynchronous url request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"The JSON data is: %@", responseObject);
jsonContents = [responseObject objectForKey:@"article"];
[self LoadStructure];
} failure:nil];
[operation start];
}
现在使用此方法可以正常加载数据。
我的问题:如何在获取数据时显示加载指示器(可以是 GIF)?上面的这种方法是从 url 获取数据的正确方法还是最佳方法?
您可以使用 iOS(UIActivityIndicator) 的默认加载指示器。您应该在完成块之前开始对其进行动画处理,并且应该隐藏在成功和失败块中。
您应该创建一个使用指标作为 class 变量的方法:
indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.hidesWhenStopped = YES;
indicator.frame = CGRectMake(35, 15, 30, 30);
[self.view addSubview:indicator];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//AFNetworking asynchronous url request
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[indicator startAnimating];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"The JSON data is: %@", responseObject);
// 停止:
[indicator stopAnimating];
jsonContents = [responseObject objectForKey:@"article"];
[self LoadStructure];
} failure::^(AFHTTPRequestOperation *operation, NSError *error){
[indicator stopAnimating];
}];
[operation start];
将 UIActivityIndicatorView
拖放到您的 XIB 视图中并将其与 IBOutlet 连接。
.h 文件
@property(nonatomic, strong)IBOutlet UIActivityIndicatorView * activityIndicator;
将 UIActivity 指示器视图添加到您的视图中。在
之前显示NSString *urlString = @"http://some-url-that-has-json-output/";
使用:[self.activityIndicator startAnimating];
并在完成块和失败块中停止它
使用:[self.activityIndicator stopAnimating];