我是iOS开发的新手,我有一个图像阵列,其中一些图像在某些情况下可能为零,对于按钮单击,我甚至需要从该特定阵列获取不是零的图像,请帮助我解决这个问题
这是我所拥有的数组,其中一些图像为零:
self.fruitImages = @[imageview1.image, imageview2.image, imageview3.image, imageview4.image, imageview5.image];
我需要删除此数组中所有nil的图像,并删除此数组中其余图像的NSLog
。
答案 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];