带有动态数据和背景图片加载的iOS TableView

时间:2014-01-21 02:41:25

标签: ios iphone objective-c uitableview

我有一个视图控制器,顶部有一个三段式按钮,下面是一个表格视图。当用户单击按钮时,将调用URL,并将相应的数据加载到单元格中。然后,在后台加载适当的图像并更新tableview。问题在于用户单击其他按钮并且最后一组数据中的图像尚未完成加载。最初,我阻止用户单击其他按钮,直到所有第一个数据都完成加载。但这真的很慢。然后我尝试等待,直到所有图像都被加载完毕才更新tableview,但这也很慢。除了制作三个表格视图之外,还有更好的方法吗?以下是我获取图片的方式。

- (void) getImageLinks:(int)number{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[imageLinks objectAtIndex:number]];
[request setAllHTTPHeaderFields:@{@"User-Agent": @"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"}];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    if([data length] > 0){
        UIImage *image = [UIImage imageWithData:data];
        if(image){
            [images addObject:image];
            dispatch_async(dispatch_get_main_queue(), ^{
                if(number<[imageLinks count]-1){
                    [self getImageLinks:number+1];
                }else{
                    isRefreshing = NO;
                    _segmentedControl.userInteractionEnabled = YES;
                    NSLog(@"end refreshing");
                    [_tableView reloadData];
                    [refreshControl endRefreshing];
                }
            });
        }else{
            NSLog(@"NO IMAGE");
        }
    }
}];

1 个答案:

答案 0 :(得分:0)

您尚未使用后​​台队列来请求数据。只需将请求调用到后台队列中的URL并保存图像数据。然后,您可以使用dispatch_sync()方法同步调用Image以更新到主队列中的ImageView。