如何异步加载JSON数据并在objective-C中的数据加载期间填充UITableView

时间:2014-07-29 20:00:43

标签: ios objective-c json uitableview

我是iOS的初学者和客观的C编程,我遇到了一个我无法解决的问题,因为我不知道从哪里开始,以及该怎么做。这是上下文:我有一个侧边栏菜单(比如facebook的一个),当你选择这个侧边栏菜单的一个类别时,我会显示一个UITableView,其中包含一个图像列表和一些文本,图像列表和文本来自带有JSON提要的互联网。我的应用程序目前工作正常,但每次更改类别时,都会冻结从Internet加载JSON数据的时间。以下是我的TableViewController.m的代码示例:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self refreshTable];
}

-(void)refreshTable {
    // Send a synchronous request
    NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:URLValue]];
    NSURLResponse * response = nil;
    NSError * error = nil;
    NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                      returningResponse:&response
                                                  error:&error];

    if (error == nil)
    {
        // Parse JSON data
    }
}

由于我是初学者,所以我非常感谢我们要采取的一些解释。我发现了一些类似的问题,他们谈论委托,委托是什么以及如何称呼它?

非常感谢你们花时间阅读我的问题。

1 个答案:

答案 0 :(得分:1)

您想使用:

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    // parsing code goes here

    // update table view
    [self.tableView reloadData];
}

将解析代码移动到完成块中。有关详细信息,请参阅:https://developer.apple.com/library/Mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/clm/NSURLConnection/sendAsynchronousRequest:queue:completionHandler :.

在解析结束时,您可以调用[self.tableView reloadData]进行刷新。