编辑时UITableView的奇怪行为

时间:2013-04-13 11:02:15

标签: ios objective-c uitableview

我的应用程序中有一个可编辑的UITableView添加和删除元素)。 它工作奇怪。
虽然我只有一两行,但一切都很完美。 但是如果我添加更多项目,我会遇到例外'*** -[__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];
    }
}

3 个答案:

答案 0 :(得分:0)

一般来说这个错误描述,当像你这样的数组索引中的错误有3个项目并且你想从Array获取/抽象第4项时,那时这种类型的错误会产生。

查找错误的最佳方法是使用BreakPint。并逐行调试您的项目。并找到你的应用程序。暗恋?我确信它在任何阵列周围都可以使用。

修改

我认为数组名typeList中的错误会在使用BreakPoint的cellForRowAtIndexPath方法中检查它。

答案 1 :(得分:0)

numberOfRowsInSection返回的项目数量大于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;
}

答案 2 :(得分:0)

我找到了解决问题的方法。 我刚刚在storyboard TableView的XCode属性中将“Sections”更改为0。 现在工作正常。

感谢大家回复!