如何在 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 存储在 Userdefaults 中?