NSMutableArray insertObject:atIndex意外的行为

|| 我试图使数组具有从1到30的数字。
NSMutableArray *numberOfdaysInAMonth = [[NSMutableArray alloc] init ] ;

for ( i=0; i< 30; i++){
    [numberOfdaysInAMonth  addObject:[NSNumber numberWithInteger:i+1]];
    NSLog (@\"Element_numberofDaysinAMonth %i = %@\", i, [numberOfdaysInAMonth objectAtIndex: i]); 
}
我有一个包含35个元素的数组,它们的值为null:
NSMutableArray *latestArrayForMonth = [[NSMutableArray alloc]init ];

for ( i=0; i<36; i++){        
    [latestArrayForMonth addObject:[NSNull null]];         
}
现在,我要使用以下命令将numberOfDaysInAMonth中的值插入到index:1中的LatestArrayWithMonth statrting中:
for (i = 0; i < 30; i++){  
    [latestArrayForMonth insertObject:[numberOfdaysInAMonth objectAtIndex:i] atIndex:1];
    NSLog (@\"Element_latestArrayForMonth %i = %@\", i, [latestArrayForMonth objectAtIndex: i]);  
}
控制台上的输出为:
Element_latestArrayForMonth 0 = <null>
Element_latestArrayForMonth 1 = 2
Element_latestArrayForMonth 2 = 2
Element_latestArrayForMonth 3 = 2
Element_latestArrayForMonth 4 = 2
Element_latestArrayForMonth 5 = 2
.
.
.
Element_latestArrayForMonth 28 = 2
Element_latestArrayForMonth 29 = 2
为什么我的输出全都是2?     
已邀请:
        因为这行:
[latestArrayForMonth insertObject:[numberOfdaysInAMonth objectAtIndex:i] atIndex:1];
因为您要连续插入项
atIndex:1
,所以当循环中\'i \'变量增加时,数组中的项数也随之增加-因此,在索引\'i \'处的项记录总是相同的项目。 还请检查是否要在索引1中插入对象是您要执行的操作-Objective-C是零索引语言,这意味着数组中的第一项位于索引0。 您可能想删除
latestArrayForMonth
数组中的所有对象,而仅使用
addObject
方法(或使用
addObjectsFromArray
快速添加数组中的所有项目)。 也可能值得研究使数组充满“空”值的替代方法-我从未见过这种方法的用例,最好是拥有一个空数组,而不是充满“空”值的数组价值观。 需要注意的另一件事是,由于您仅存储原始整数值,因此您可能会发现NSIndexSet比NSArray更适合使用(取决于所发布代码的应用程序,但值得研究)。     
        使用
insertObject:... atIndex:1
,您将在索引1插入第1个月(没有元素,所以它会进入索引0),然后在第2个月(实际上是在索引1)插入,然后继续在2之前插入。在5个元素之后,您的数组将如下所示: 5,4,3,2。您应该做的就是通过从索引中减去1来访问数组,但是如果要访问从索引1开始的数组,请首先添加一个NSNull。
[latestArrayForMonth addObject:[NSNull null]];

for (i = 0; i < 30; i++){

    [latestArrayForMonth addObject:[numberOfdaysInAMonth objectAtIndex:i]];

    NSLog (@\"Element_latestArrayForMonth %d = %@\", i + 1, [latestArrayForMonth objectAtIndex: i + 1]);  

}
    

要回复问题请先登录注册