我是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];
我该怎么办?
答案 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:最好是使用开源库,为您处理所有这些(在后台线程中下载图像,缓存,......)。
答案 1 :(得分:1)
查看LazyTableImages示例。
已过时,您可以使用NSURLSesssionDataTask替换IconDownloader类,但它将为您提供如何构建代码的基本概念。