0

アプリケーションに編集可能な要素がありますUITableView要素の追加と削除を使用)。それは奇妙に働いています。
1 行か 2 行しかありませんが、すべてが完璧に機能しています。しかし、さらにアイテムを追加すると、例外があります'*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

ブレークポイントを設定して処理できませんでした。たぶん、誰かが私を助けることができますか?

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int plusRow = 0;
    if ([[self tableView] isEditing]) plusRow = 1;

    return [typeList count] + plusRow;
}

- (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];
    }

    if ([indexPath row] > ([typeList count]-1)) {
        NSString * appendCellDescription = @"";

        if ([[self tableView] isEditing]) appendCellDescription = @"Add";

        [[cell textLabel] setText:appendCellDescription];
    } else {
        NSLog(@"Accessing array: %d", [indexPath row]);
        [[cell textLabel] setText:[[typeList getObject:[indexPath row]] description]];
    }

    return cell;
}

#pragma mark - Editing table view

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Row: %d, count: %d", [indexPath row], [typeList count]);

    if (indexPath.row > [typeList count]-1) {
        return UITableViewCellEditingStyleInsert;
    } else {
        return UITableViewCellEditingStyleDelete;
    }
}

- (IBAction)btnModifyClick:(id)sender{
    if ([[self tableView] isEditing]) {
        [[self tableView] setEditing:FALSE animated:YES];
        [[self tableView] reloadData];
    } else {
        [[self tableView] setEditing:TRUE animated:YES];
        [[self tableView] reloadData];
    }
}
4

3 に答える 3

0

numberOfRowsInSectiondatasource メソッドでフェッチされたものよりも多くの項目数をcellForRowAtIndexPath返している場合は、戻り値をデバッグしてみてください。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int plusRow = 0;
    if ([[self tableView] isEditing]) plusRow = 1;
    NSLog(@"%i",[typeList count] + plusRow);
    return [typeList count] + plusRow;
}
于 2013-04-13T11:13:07.413 に答える
0

一般的にこのエラーは、配列に 3 つの項目があり、配列から 4 番目の項目を取得/抽象化しようとするなど、配列インデックスに誤りがある場合に、このタイプのエラーが発生することを示しています。

エラーを見つける最善の方法は、BreakPint を使用することです。プロジェクトを1行ずつデバッグします。アプリの場所を見つけます。打ち砕く ??私はそれがあらゆる配列の周りを巡っていると確信しています。

編集:

配列名に誤りがあると思われますが、BreakPointtypeListのメソッドで確認してください。cellForRowAtIndexPath

于 2013-04-13T11:10:27.297 に答える
0

私は自分の問題を解決する方法を見つけました。ストーリーボードTableViewのXCodeプロパティで「セクション」を0に変更しました。そして今、正常に動作しています。

みんな反応ありがとう!

于 2013-04-13T16:29:05.690 に答える