从 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(UIActivityIndi​​cator) 的默认加载指示器。您应该在完成块之前开始对其进行动画处理,并且应该隐藏在成功和失败块中。

您应该创建一个使用指标作为 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];