0

ここで、ifステートメントが発生するたびにtempArrayがmasterArrayに追加されることになっている、この奇妙なシンフが発生しています。(ifステートメントは完全に機能し、必要なときにトリガーされます。)

また、毎回一時配列をクリアする必要があります。

最終的な結果は、追加した各配列を含むmasterarrayになります(forループ全体で追加したすべての一時配列を意味します)

代わりに、tempArrayをインデックス0のMas​​terArrayに毎回追加し続けるだけです。

コード:

- (void)alpabetize:(NSArray *)arr {

self.tempArray = [[NSMutableArray alloc] init];
self.masterArray = [[NSMutableArray alloc] init];

for (int i = 0; i<[arr count]; i++) {

    NSString *currentString = [NSString stringWithFormat:@"%@", [[[arr objectAtIndex:i] valueForKey:@"first_name"] substringToIndex:1]];
    NSString *nextString = [NSString stringWithFormat:@"%@", [[[arr objectAtIndex:(i+1)] valueForKey:@"first_name"] substringToIndex:1]];

    [self.tempArray addObject:[arr objectAtIndex:i]];

    if (![currentString isEqualToString:nextString]) {

    [self.masterArray addObject:tempArray];
    [self.tempArray removeAllObjects];

    }

}

}

以前に他の配列に追加された元の配列からすべてのオブジェクトを削除した場合。これは他のアレイもクリアしますか?これは私には意味がありません。私のコードに何か問題があるに違いありません。誰かが私のエラーを見つけるのを手伝ってくれますか?

お時間をいただきありがとうございます!

4

3 に答える 3

3

使用する

[self.masterArray addObject:[tempArray copy]]; // retained copy of array

また

[self.masterArray addObject:[NSArray arrayWithArray:tempArray]]; // auto released copy of array

それ以外の

[self.masterArray addObject:tempArray];

コードでは、次のステートメントでクリアしているのと同じ配列の参照を追加しています。

于 2012-06-14T04:49:34.227 に答える
2
[self.masterArray addObjectsFromArray:tempArray];
[tempArray removeAllObjects];
于 2012-06-14T04:55:13.103 に答える
1

ループ内でself.tempArrayを解放してもよろしいですか?IF条件に入ると、配列はnilになり、このメソッドを再度呼び出さない限り、配列を使用できなくなります。forループの後でself.tempArrayを解放してみてください。

于 2012-06-14T04:50:47.617 に答える