如何在 NSArray 的 cell.imageview.image 中显示图像?

Posted

技术标签:

【中文标题】如何在 NSArray 的 cell.imageview.image 中显示图像?【英文标题】:how to show images at cell.imageview.image from NSArray? 【发布时间】:2013-05-23 15:22:23 【问题描述】:
Image Array=[NSArray arrayWithObjects:[UIImage imageNamed:@"1 (1).gif"],
            [UIImage imageNamed:@"1 (2).gif"],[UIImage imageNamed:@"1 (3).gif"],[UIImage imageNamed:@"1 (4).gif"],[UIImage imageNamed:@"1 (5).gif"],[UIImage imageNamed:@"1 (6).gif"],[UIImage imageNamed:@"1 (7).gif"],nil];

//here is another array of objects showing in table view

alphabetsArray =[[NSMutableArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];
    //everything working fine until when i add this code,app crashes with SIGABRT
cell.imageView.image=[UIImage imageNamed:[imageArray objectAtIndex:indexPath.row]];

其实我还需要问一些问题:

    如果数组中的图像数量不等于tableview中的对象数量有什么问题吗? 除了 uiimage imageNamed:"whatever.jpeg" 之外,如果图像数量巨大,还有其他方法可以添加图像吗 如果添加一个文件夹并给出其地址或名称,然后它会自行拾取图像...... 如果图像数量为 250,那么在项目中添加图像最合理的方法是什么(即 sqlite、coreData、硬编码,就像我一样)?

【问题讨论】:

尝试查看崩溃日志以帮助您调试问题。在那里你会看到如果索引超过数组中元素的数量,方法 objectAtIndex 会抛出异常,导致崩溃。 其他问题呢? 【参考方案1】:

首先,[UIImage imageNamed:[imageArray objectAtIndex:indexPath.row]] 这一行有问题。

[imageArray objectAtIndex:indexPath.row] 在您当前的实现中返回 UIImage 对象,而您正在尝试使用 UIImage 对象的名称获取 UIImage。

您应该直接将 UIImage 对象返回给 cell.imageView.image。

cell.imageView.image = [imageArray objectAtIndex:indexPath.row];

其次,我不确定表中有多少行,但是如果索引超过数组中的元素个数,方法objectAtIndex会抛出异常,导致应用程序崩溃。

【讨论】:

【参考方案2】:

1) 这不会有问题,除非你想拥有相同的号码。它不会抛出错误,但您的应用逻辑将无法正常工作。

2)据我所知,这很容易做到,使用简单的命名约定,例如image01,这样您就可以复制并粘贴代码并更改图像的结尾数字

3) 我不确定你在问什么。

4) 通常您只需通过drag-N'-drop 或选择文件将图像添加到您的项目中。核心数据和 sqlite 用于您正在开发的实际应用程序,而不是在 Xcode 中存储图像。

至于主要问题,您说要显示来自NSArray的图像,如果是这样,只需获取tableview的索引路径,并使用objectAtIndex:查找相应的图像

希望能有所帮助:)

【讨论】:

感谢您的宝贵时间和详尽的答复,先生! 3)我问如果我在项目中拖放一个图像文件夹怎么办,那么如何访问那里的图像? 不客气!将图像拖放到 Xcode 中并没有错。访问是指通过代码访问吗?如果是这样,您可以使用UIImage *myImage = [UIImage imageNamed:@"Image01.png"]; 现在您有一个可以使用的myImage 对象,它将代表Image01.png 图像。 & 如果这是您正在寻找的答案,请检查绿色复选标记 :) 但是我需要添加 250 张图片,我该如何使用这个对象和数组?【参考方案3】:

其实我已经想通了,有一个简单的方法。

cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.gif", [TextShownInTableArray objectAtIndex:indexPath.row]]];

我在这个数组中有字母,我想对每个字母使用不同的图像,所以只需在项目中添加与字母名称相同的图像。这行代码运行良好。 TextShownInTableArray 是您的带有文本的数组:)

【讨论】:

【参考方案4】:
Image Array=[NSArray  alloc]initWithObjects:[UIImage imageNamed:@"8.gif"],
        [UIImage imageNamed:@"2.gif"],[UIImage imageNamed:@"3.gif"],[UIImage imageNamed:@"6.gif"],[UIImage imageNamed:@"5.gif"],[UIImage imageNamed:@"4.gif"],[UIImage imageNamed:@"7.gif"],nil];

你的数组 alloc 和那个数组“保留”这个数组并尝试这个代码。谢谢

[imageArray retain];

仅在您的代码中更改这一行。并解决您的问题

cell.imageView.image=[imageArray objectAtIndex:indexPath.row];

我希望这段代码对你有用。检查这个

【讨论】:

【参考方案5】:
cell.imageView.frame = CGRectMake(5, 5, 50, 50);

NSString *imgstr = [[Arr objectAtIndex:indexPath.row] objectForKey:@"thumb"];

cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgstr]]];

【讨论】:

以上是关于如何在 NSArray 的 cell.imageview.image 中显示图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断对象是不是在 NSArray 中?

如何将 NSArray 存储在 Userdefaults 中?

如何在 Swift 中比较两个可选的 NSArray

如何在核心数据中保存NSArray数据?

如何将 NSMutableArray 转换为 NSArray?

如何在 iOS 中检查 NSArray 是不是为空或为空?