完成后台工作后更新UITableView

时间:2014-05-24 14:04:35

标签: objective-c ios7.1

我是iOS开发新手并且遇到了一个愚蠢的问题 我有一个解析RSS提要的项目,它一切正常,但我试图在后台获取图像以改善UI并坚持如何更新我的TableView单元格中的UIImageView? 代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCell";
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.titleLabel.text = [[feeds objectAtIndex:indexPath.row] objectForKey:@"title"];
    NSString* test = [[feeds objectAtIndex:indexPath.row] objectForKey:@"url"];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(doNow:)
                                        object:test];
    [queue addOperation:operation];
    cell.myImages = theImagePropery;
    return cell;
}
-(void)doNow:(NSString*)myData
{
    NSString* url = myData;
    url = [url stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSURL* imageURL = [NSURL URLWithString:url];
    NSData* imageData = [NSData dataWithContentsOfURL:imageURL];
    UIImage* image = [[UIImage alloc]initWithData:imageData];
    [self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
}

现在在displayImage方法中,我不知道该做什么,这是我最后一次尝试:

-(void)displayImage:(UIImage *)myImage{
    [[self tableView] beginUpdates];
   theImageProbery = [[UIImageView alloc] initWithImage:myImage];
    [[self tableView] endUpdates];

我该怎么办?

2 个答案:

答案 0 :(得分:1)

不要使用同步方法dataWithContentsOfURL来请求基于网络的URL。此方法可以在慢速网络上阻止当前线程数十秒,从而导致糟糕的用户体验。使用NSURLSession方法(如果您的目标是iOS 7及更高版本)。

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

或使用NSURLConnection方法(您的目标是iOS 6及更高版本)。

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

PS:最好是使用开源库,为您处理所有这些(在后台线程中下载图像,缓存,......)。

AFNetworking+UIImageView

答案 1 :(得分:1)

查看LazyTableImages示例。

已过时,您可以使用NSURLSesssionDataTask替换IconDownloader类,但它将为您提供如何构建代码的基本概念。