0

これが私のコードです

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }

    if (indexPath.row >= [CatArray count])
    {
        return nil;
    }

    if(searching)
    {
        cell.textLabel.text=[ListOfArray objectAtIndex:indexPath.row];
    }

     else
     {
             NSString *cellv=[CatArray objectAtIndex:indexPath.row];
             cell.textLabel.text=cellv;
     }
     return cell;
}

インデックス 0 のオブジェクトをクリックすると、問題なく動作しますが、インデックス 1 以上をクリックするとプログラムに[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]エラーが表示されます。このエラーを修正する方法が見つかりません。

助けてください。

4

3 に答える 3

3

CatArrayカウントがチェックされている間、カウントはチェックListOfArrayされていません。

例外でブレークをオンにして、例外の原因となっている行を見つけます。 ここに画像の説明を入力

また、ドキュメントから nil を返すことはエラーであることに注意してください。

テーブル ビューが指定された行に使用できる UITableViewCell から継承するオブジェクト。nil を返すと、アサーションが発生します。–</p>

于 2013-05-26T15:32:40.133 に答える
1

コードを再考する必要があるというヒントは、次の cellForRowAtIndexPath メソッドに表示されます。

if (indexPath.row >= [CatArray count])
{
    return nil;
}

コードが適切な配列のカウントで numberOfRowsInSection に適切に応答する場合、そのような状態は発生しません。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return (searching)? [ListOfArray count] : [CatArray count];
}
于 2013-05-26T15:33:24.980 に答える