如何从阵列中获取特定图像?

时间:2017-01-30 12:06:07

标签: ios objective-c sorting nsmutablearray nsarray

我是iOS开发的新手,我有一个图像阵列,其中一些图像在某些情况下可能为零,对于按钮单击,我甚至需要从该特定阵列获取不是零的图像,请帮助我解决这个问题

这是我所拥有的数组,其中一些图像为零:

self.fruitImages = @[imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5.image];

我需要删除此数组中所有nil的图像,并删除此数组中其余图像的NSLog

4 个答案:

答案 0 :(得分:2)

Objective-C数组(或更确切地说,NSArrays)不能包含nil。您可以在NSArray中添加的唯一内容是NSNull,以及代表 nil的对象。如果在上面的代码中,其中一个变量包含nil,那么该数组将被截断。

编辑:

实际上,如果传入的任何值为nil,则OP发布的代码将崩溃。

答案 1 :(得分:0)

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];

答案 2 :(得分:0)

解决方案:

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崩溃

答案 3 :(得分:-1)

试试这个

 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];