如何从数组中获取特定图像?

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.imageimageview5.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坐标?

从 iOS 中的相机胶卷中获取特定图像

如何使用php中的while循环显示从数据库中获取的多个图像中的特定点击图像,以及用于显示的javascript?

如何从对象数组中获取图像的URL

如何从 Gatsby.js 中的 YAML 数组中获取图像

如何在 Windows Phone 8.1 上从数据库中获取图像并将其显示为字节数组