如何解决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 = %@\",[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]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。