0
for(NSUInteger j = 0 ; j < [sports count] ; j++){

    NSIndexPath *loopPath = [NSIndexPath indexPathWithIndex:j]; 

    if([pickerTable cellForRowAtIndexPath:loopPath].accessoryType == UITableViewCellAccessoryCheckmark){

        [chosenSports addObject:[pickerTable cellForRowAtIndexPath:loopPath].textLabel.text];                          

    }

}

このコードはsigabrtエラーを生成します。正確なエラーは、「UITableViewで使用するための無効なインデックスパスです。テーブルビューに渡されるインデックスパスには、セクションと行を指定する2つのインデックスが含まれている必要があります。可能であればUITableView.hのNSIndexPathのカテゴリを使用してください。」前もって感謝します;

4

2 に答える 2

4

エラーは正しいです。 NSIndexPathは、行とセクション番号で構成されます。これは、実際の実装がどれほどブラインドであるかを考慮すると、テーブルビューに特に当てはまります(データソースとデリゲートに依存していることを考慮して)。単純な初期化エラーがあります。代わりにこれを試してください。

for(NSUInteger j = 0 ; j < [sports count] ; j++){

    NSIndexPath *loopPath = [NSIndexPath indexPathForRow:j inSection:0]; 

    if([pickerTable cellForRowAtIndexPath:loopPath].accessoryType == UITableViewCellAccessoryCheckmark){

        [chosenSports addObject:[pickerTable cellForRowAtIndexPath:loopPath].textLabel.text];                          

    }

}
于 2012-08-18T03:40:26.773 に答える
2

@CodaFiの回答に加えて、現在表示されていない行がcellForRowAtIndexPath返されることに注意する必要があります。nil

したがって、ループは現在表示されているセルからのオブジェクトのみを追加しますが、これは希望どおりではない可能性があります。

于 2012-08-18T07:29:35.880 に答える