从NSArray将图像加载到UITableViewCell

时间:2011-03-07 14:00:01

标签: iphone objective-c uitableview

我在iOS项目中的.jpgs中有几个hunderd /Resources

这是viewDidLoad方法:

- (void)viewDidLoad {


     NSArray *allPosters = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:@"."];

    [super viewDidLoad];

}

以上内容成功将所有.jpgs加载到NSArray。 我只需要在.jpgs中的UITableViewCells中显示此数组中的所有UITableView

以下是-(UITableViewCell *)tableView:cellForRowAtIndexPath:方法:

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    NSDictionary *posterDict = [allPosters objectAtIndex:indexPath.row];
    NSString *pathToPoster= [posterDict objectForKey:@"image"];

    UITableViewCell *cell =
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell ==nil ) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];


            }

    UIImage *theImage = [UIImage imageNamed:pathToPoster];
    cell.ImageView.image = [allPosters objectAtIndex:indexPath.row];
    return cell;
}   

我知道问题出在cell.ImageView.image,但我不确定问题是什么?如何从阵列中抓取每个.jpg并在每行中显示?

3 个答案:

答案 0 :(得分:2)

尝试使用[UIImage imageWithContentsOfFile:pathToPoster]而不是imageNamed。并将值设置为UIImage对象。

答案 1 :(得分:2)

NSArray *allPosters = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:@"."];

这将为您提供一系列路径(由方法名称建议)。这些路径是NSStrings。 但是您将此数组分配给局部变量,并且在您离开viewDidLoad后此变量将消失。

因此您必须将其更改为以下内容:

allPosters = [[[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:@"."] retain];

另一个:

NSDictionary *posterDict = [allPosters objectAtIndex:indexPath.row];
NSString *pathToPoster= [posterDict objectForKey:@"image"];

如果您已正确分配数组,这肯定会崩溃。

将其更改为

NSString *pathToPoster = [allPosters objectAtIndex:indexPath.row];

下一个:

UIImage *theImage = [UIImage imageNamed:pathToPoster];
cell.ImageView.image = [allPosters objectAtIndex:indexPath.row];

UIImages imageNamed:不适用于路径,需要文件名。当然,您希望将真实图像分配给imageview而不是海报的路径。所以改变它:

UIImage *theImage = [UIImage imageNamed:[pathToPoster lastPathComponent]];
cell.imageView.image = theImage;

答案 2 :(得分:1)

这可能只是一个错字,但应该是:

//lowercase "i" in imageView
cell.imageView.image = [allPosters objectAtIndex:indexPath.row]; 

此外 - 您正在创建UIImage * theImage,但之后您不会使用它。那里发生了什么?