我正在尝试使用临时数组(tempArray)创建一个包含3个对象的数组的数组(shopImages3)。包含所有字符串的大数组是shopImages。
此时大数组包含6个字符串。这意味着它在
中出现了2次“if((i == 2)||(i == 5)||(i == 8)||(i == 11)||(i == 14)||(i == 18))“
语句。这很好用。但NSLogs显示数组为空。
如何正确填充数组?
2014-08-28 14:01:52.575 Jump Game[3622:60b] this is temp array (null)
2014-08-28 14:01:52.575 Jump Game[3622:60b] this is shopimages array (null)
2014-08-28 14:01:52.576 Jump Game[3622:60b] this is temp array (null)
2014-08-28 14:01:52.576 Jump Game[3622:60b] this is shopimages array (null)
代码从这里开始
@interface ShopCollectionViewController ()
{
NSArray *shopImages;
NSMutableArray *shopImages3;
NSMutableArray *tempArray;
}
........
for ( int i = 0; i < [shopImages count]; i++)
{
[tempArray addObject: shopImages[i]];
if((i == 2) || (i == 5) || (i == 8) || (i == 11) || (i == 14) || (i == 18))
{
NSLog(@"this is temp array %@", tempArray);
[shopImages3 addObject:tempArray];
NSLog(@"this is shopimages array %@", shopImages3);
[tempArray removeAllObjects];
}
}
答案 0 :(得分:2)
看起来你没有初始化数组。在init
中,您需要
tempArray = [NSMutableArray new];
答案 1 :(得分:1)
一些想法:
根据你的描述,听起来这更适合NSDictionary,键是你的条件(即2,5,7,11,14,18)。
至于null问题,我不知道你的集合在哪里被初始化。首先需要这样做,除非它们是getter中的延迟加载(如果它们是属性)。
NSMutableArray *mAr = [NSMutableArray new];
或
NSMutableArray *mAr = @[obj1,obj2,nil];
语法糖的最后一件事,你可以将这些条件放在NSSet
中并缩短你的if条件。
NSSet *set = [[NSSet alloc] initWithObjects:[NSNumber numberWithInt:1], nil]; //etc
if([set containsObject:[NSNumber numberWithInt:i]])
答案 2 :(得分:0)
您是否忘记了初始化阵列?您的代码应如下所示:
tempArray = [NSMutableArray new];
shopImages3 = [NSMutableArray new];
shopImages = [NSMutableArray new];
for ( int i = 0; i < [shopImages count]; i++)
{
[tempArray addObject: shopImages[i]];
if((i == 2) || (i == 5) || (i == 8) || (i == 11) || (i == 14) || (i == 18))
{
NSLog(@"this is temp array %@", tempArray);
[shopImages3 addObject:tempArray];
NSLog(@"this is shopimages array %@", shopImages3);
[tempArray removeAllObjects];
}
}
答案 3 :(得分:0)
你首先像这样分配NSMutableArray
tempArray=[[NSMutableArray alloc]init];