如何从数组中获取特定图像?
Posted
技术标签:
【中文标题】如何从数组中获取特定图像?【英文标题】:How to get particular images from an Array? 【发布时间】:2017-01-30 12:06:06 【问题描述】:我是 ios 开发的新手,我有一个图像数组,其中一些图像在某些情况下可能为零,对于按钮单击,即使我需要从该特定数组中获取不为零的图像,请帮我解决这个问题
这是我拥有的数组,其中一些图像为零:
self.fruitImages = @[imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5.image];
我需要删除这个数组中所有为 nil 的图像和NSLog
这个数组中的其余图像。
【问题讨论】:
@NiravD 我也打算这么建议,但他问的是Objective-C 一些图像是零在哪里?这些图像是来自UIImageView
还是名称来自UIViewController
的存储图像?
【参考方案1】:
Objective-C 数组(或者更确切地说,NSArrays
)不能包含 nil。唯一可以放入NSArray
的是NSNull
,以及代表 nil 的对象。如果在上面的代码中,其中一个变量包含 nil,则该数组将在该点被截断。
编辑:
实际上,如果传入的任何值为零,OP 发布的代码都会崩溃。
【讨论】:
True 用于编译器检查。那是关于在运行时插入 nil 对象【参考方案2】:self.fruitImages = @[imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5.image];
如果 .image == nil 之一,此代码将发生崩溃
* 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'* -[__NSPlaceholderArray initWithObjects:count:]: 尝试插入 nil
尝试使用 NSMutableArray 并在它不为 nil 时插入新项目
示例:
NSArray *imageViews = @[imageV1, imageV2, imageV3];
NSMutableArray *result = [NSMutableArray new];
for (UIImageView *imgV in imageViews)
if (imgV.image)
[result addObject:imgV.image];
self.fruitImages = [result copy];
【讨论】:
是的,但该语法不会失败:self.fruitImages = [NSMutableArray arrayWithObjects:imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5, nil]; @Adobels,该代码不会崩溃,但如果传入的任何图像为 nil,则该数组将在该点被截断,并且不会包含任何有效图像。所以self.fruitImages = [NSMutableArray arrayWithObjects:imageview1.image, imageview2.image, <nil>, imageview4.image, imageview5.image, nil];
(其中<nil>
表示计算结果为nil 的表达式,将导致数组不包含imageview4.image
或imageview5.image
。因此这不是一个好的解决方案。【参考方案3】:
解决方案:
NSArray *ivs = @[imageview1, imageview2, imageview3, imageview4, imageview5];
NSMutableArray *mivs = [[ivs valueForKey:@"image"] mutableCopy];
[mivs removeObjectIdenticalTo:[NSNull null]];
self.fruitImages = [NSArray arrayWithArray:mivs];
很高兴知道:
UIImageView * im1 = [[UIImageView alloc] initWithImage:nil];
UIImageView * im2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]];
UIImageView * im3 = [[UIImageView alloc] initWithImage:nil];
NSArray *arrayA = [NSArray arrayWithObjects:im1.image, im2.image, im3.image, nil];
NSArray *arrayB = [NSArray arrayWithObjects:im2.image, im1.image, im3.image, nil];
NSArray *arrayC = @[im2.image, im1.image, im3.image];
NSArray *arrayD = @[im1.image, im2.image, im3.image];
ArrayA 有 0 个元素
ArrayB 有 1 个元素
ArrayC 崩溃
ArrayD 崩溃
【讨论】:
【参考方案4】:试试这个
NSMutableArray *imgArray = [NSMutableArray arrayWithObjects:imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5.image, nil];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
if (imgArray.count != 0)
for (int i = 0; i <= imgArray.count - 1; i++)
UIImage *img = [imgArray objectAtIndex:i];
if (img == nil)
[tempArray addObject:[imgArray objectAtIndex:i]];
[imgArray removeObjectsInArray:tempArray];
【讨论】:
它不能正常工作。试试 UIImageView * im1 = [[UIImageView alloc] initWithImage:nil]; UIImageView * im2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]]; UIImageView * im3 = [[UIImageView alloc] initWithImage:nil];以上是关于如何从数组中获取特定图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何从python中的图像中获取特定像素(蓝色)的x,y坐标?