Objective c 如何将数组对象输入NSMutableArray?

Objective 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

SorterDarray包含100多个需要按“时间”键中的“小时”进行组织的对象。结果是有一个数组来填充表的各个部分,并使用小时作为索引。”“时间”的格式为-2012-05-15 07:20:00

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;