0

少し検索しましたが、質問に対する答えが実際には見つかりませんでした。以下のコードは、いくつかのオブジェクトを含む NSMutable 配列の内容をコピーしようとしています。

以下のコードを試してみましたが、実行するとエラーは発生しませんが、新しい配列は私が思っていたようにオブジェクトを取得しません。

csvContent は、CSV ファイルの解析からのオブジェクトを含む配列であり、他の NSMutable 配列 round1、round2 などはヘッダー ファイルで定義されています。

NSLOG 出力は正しいですが、配列にはオブジェクトが含まれていません。

for(int loopNumber = 0; loopNumber < [csvContent count]; loopNumber++)
{
    if ([[[csvContent objectAtIndex:loopNumber] objectAtIndex:1] isEqualToString:@"1"])
    {
        [round1 addObject:[csvContent objectAtIndex:loopNumber]];
        NSLog(@"round 1");
    }

    if ([[[csvContent objectAtIndex:loopNumber] objectAtIndex:1] isEqualToString:@"2"])
    {
        [round2 addObject:[csvContent objectAtIndex:loopNumber]];
        NSLog(@"round 2");
    }

    if ([[[csvContent objectAtIndex:loopNumber] objectAtIndex:1] isEqualToString:@"3"])
    {
        [round3 addObject:[csvContent objectAtIndex:loopNumber]];
        NSLog(@"round 3");
    }
}
4

1 に答える 1

2

round1round2、およびの配列を実際に作成して初期化しましたround3か? 言い換えれば、nilこのループが実行されたときにそうでないことを確認してください。

また、あなたのコードはひどく非効率的です。[csvContent objectAtIndex:loopNumber]ループ内で 6 回呼び出します。これを試してください(入力を節約するi代わりに使用しています):loopNumber

for (int i = 0; i < csvContent.count; i++) {
    NSArray *loopContent = csvContent[i];
    NSString *val = loopContent[1];

    if ([val isEqualToString:@"1"]) {
        [round1 addObject:loopObject];
    } else if ([val isEqualToString:@"2"]) {
        [round2 addObject:loopObject];
    } else if ([val isEqualToString:@"3"]) {
        [round3 addObject:loopObject];
    }
}
于 2012-11-02T04:00:26.417 に答える