iOS UITableView节中的行数使用相同节的不同数组

时间:2015-10-11 04:57:03

标签: ios objective-c arrays xcode uitableview

所以我有一个UITableView,其中有一个部分我想在按钮点击时更新。现在,使用不同的数组填充此部分中的行数。我根据字典中的索引选择返回哪一个。像这样:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
switch (section) {
    case 0:
        return 1;

    case 1: {
        NSMutableArray *array = [self.dict objectForKey:[NSNumber numberWithInteger:self.index]];
        return [array count] + 1;
    }
    default:
        break;
}
return 1;
}

因此,第1节的行取决于不同的数组。所以现在在我的表视图中,我有一个按钮,在第1节中插入另一行,我也更新了相应的数组。现在,当我点击另一个更新此部分的按钮以显示self.dict数据结构中不同数组的值时,我收到一个错误: '无效更新:第1节中的行数无效。更新后的现有部分中包含的行数(3)必须等于更新前该部分中包含的行数(4),加上或减去从该部分插入或删除的行数(0插入,0删除)和加或减移入或移出该部分的行数(0移入,0移出)。 因此,例如,如果在我的第一个数组中我有3个单元格,然后用户再添加一个,那么有4个单元格,然后如果用户单击应该更新第1部分的按钮以显示第二个数组(其中有3个单元格) ,抛出上面的错误。我认为这是因为数据源发生了变化,行数减少而没有明确删除单元格。我该如何解决这个问题?

更新了更多代码:

// Insert here when the very last cell of section 1 is selected
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSMutableArray *array = [self.dict objectForKey:[NSNumber numberWithInteger:self.index]];
    if (indexPath.section == 1 && indexPath.row == [array count]) {
        [array addObject:[NSNumber numberWithInt:8]];
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[array count]-1 inSection:1]] withRowAnimation:UITableViewRowAnimationFade];
    }
}


// Code for reloading the table view

- (IBAction)next:(id)sender {
    self.index++;
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
}

}

1 个答案:

答案 0 :(得分:1)

您应该尝试reloadData

,而不是重新加载这些部分
- (IBAction)next:(id)sender {
    self.index++;
    [self.tableView reloadData]
}