1

sortedArray には、「時間」キーの「時間」で整理する必要がある 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];
}

オブジェクトが、detailArray の正しい位置に配置されていないか、まったく配置されていません。たとえば、[detailArray objectAtIndex:6]時間 14 (午後 2 時) の項目を指定します。

私は何が欠けていますか?

最初の回答でコードを修正するように編集します。それは今です:

NSInteger d = 0;
NSInteger prevd;
NSMutableArray *tempArray = nil;
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) {
        tempArray = NSMutableArray array];
        [detailArray replaceObjectAtIndex:d withObject:tempArray];
    }
    [tempArray addObject:item];
}
4

1 に答える 1

3

そのように tempArray を再利用することはできません。すべて同じ tempArray インスタンスを指す複数のエントリを含む detailArray になってしまいます。(つまり、時間があったすべてのスロットは、最後のタイムスロットの配列になります)。

それ以外の

[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];

欲しくなる

tempArray = [NSMutableArray array];
[detailArray replaceObjectAtIndex:d withObject:tempArray];

そうすれば、各タイムスロットには独自の配列があります。また、tempArray の元の宣言を次のように変更することもできます。

NSMutableArray *tempArray = nil;
于 2012-05-16T03:04:02.190 に答える