我尝试使用..
创建一个数字从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?
答案 0 :(得分:1)
这是因为这一行:
[latestArrayForMonth insertObject:[numberOfdaysInAMonth objectAtIndex:i] atIndex:1];
因为你连续插入项目atIndex:1
,因为'i'变量在循环中增加,所以数组中的项目数也是如此 - 因此在索引'i'处记录项目总是是同一个项目。
还请检查在索引1处插入对象是否是您想要做的事情 - Objective-C是零索引语言,这意味着数组中的第一项是在索引0处。
您可能希望删除latestArrayForMonth
数组中的所有对象,只需使用addObject
方法(或使用addObjectsFromArray
快速添加数组中的所有项目。)
同样可能值得研究一个阵列充满'空'值的替代方法 - 我从未见过这种方法的用例,最好有一个空数组而不是一个充满'空'值的数组。
另外需要注意的是,由于您只是存储原始整数值,因此您可能会发现NSIndexSet比NSArray更适用(取决于发布代码的应用,但值得研究)。
答案 1 :(得分:0)
使用insertObject:... atIndex:1
你在索引1插入第1个月(没有元素,因此它转到索引0),然后是第2个月(实际上是索引1)然后你继续插入2.之后5个元素你的数组看起来像这个1,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]);
}