将对象添加到NSMutableArray将不起作用

时间:2014-08-28 12:04:41

标签: ios objective-c arrays nsmutablearray

我正在尝试使用临时数组(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];
    }
}

4 个答案:

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