Objective c 如何将数组对象输入NSMutableArray?
SorterDarray包含100多个需要按“时间”键中的“小时”进行组织的对象。结果是有一个数组来填充表的各个部分,并使用小时作为索引。”“时间”的格式为-2012-05-15 07:20:00Objective c 如何将数组对象输入NSMutableArray?,objective-c,ios,nsmutablearray,Objective C,Ios,Nsmutablearray,SorterDarray包含100多个需要按“时间”键中的“小时”进行组织的对象。结果是有一个数组来填充表的各个部分,并使用小时作为索引。”“时间”的格式为-2012-05-15 07:20:00 NSInteger d = 0; NSInteger prevd; NSMutableArray *tempArray = [[NSMutableArray alloc] init]; detailArray = [[NSMutableArray alloc] init]; for (NSIntege
NSInteger d = 0;
NSInteger prevd;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
detailArray = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 24; ++i)
[detailArray addObject:[NSNull null]];
for (NSArray *item in sortedArray) {
prevd = d;
d = [[[[item objectAtIndex:0] objectForKey:@"time"] substringWithRange:NSMakeRange(11, 2)] intValue];
if (d > prevd && prevd != 0) {
[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];
}
[tempArray addObject:item];
}
您不能像那样重用tempArray,最终会得到包含多个条目的detailArray,这些条目都指向同一个tempArray实例。(即,每个有时间的插槽都将以最后一个时间插槽的阵列结束) 而不是
[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];
你会想要的
tempArray = [NSMutableArray array];
[detailArray replaceObjectAtIndex:d withObject:tempArray];
这样,每个时隙都有自己的阵列。
您还需要将tempArray的原始声明更改为
NSMutableArray *tempArray = nil;
这些变化奏效了。请再回答几个问题:为什么要使用
NSMutableArray*tempArray=nil
声明?(我假设应该是原稿的第3行)那有什么影响?不是每次都创建并返回一个新对象吗?运行时是否创建了一个新的和不同的tempArray对象?第二,为什么顺序是“创建”然后“替换”?(中间代码组中的两行)当tempArray放在下一行的detailArray中时,它不是空的吗?请记住,replaceObjectAtIndex不复制数组,它只是保存对它的引用,所以您需要先创建,否则当您将它放在detailArray中时,它仍然会包含以前的slot值。
NSMutableArray *tempArray = nil;