我从一个带有一个部分的tableview开始,第一部分总是有三行。在下载了一些内容之后,我想在第二部分中显示一个新单元格,所以我这样做:
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
但是我得到了一个NSInternalConsistencyException:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无效更新:无效 部分数量。表中包含的部分数量 更新后的视图(2)必须等于部分的数量 在更新前的表视图中包含(1),加上或减去 插入或删除的部分数量(插入0,删除0)。'
为什么不自动插入新的部分,如果我插入一个部分,那么在插入不在新部分中的行时会出现问题。
为什么不能自动添加新栏目?当然,InsertRowAtIndexpath:还包括在必要时插入一个部分,因为NSIndexPath还包含一个部分。
答案 0 :(得分:3)
[self.tableView insertSections:nsIndexSetToInsert withRowAnimation:UITableViewRowAnimationAutomatic];
并且不要忘记相应地设置numberOfSectionsInTavleView和numberOfRowsInSection。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
NSInteger numberOfSections;
if (condition1) {
numberOfSections = 2;
} else if (condition2) {
numberOfSections = 3;
} else {
numberOfSections = 4;
}
return numberOfSections;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section
if(section == 1) return 3;
else return numberOfRows;
}
答案 1 :(得分:0)
将此保留在ViewDidLoad
中childArray1 = [[NSMutableArray alloc] initWithObjects: @"Apple", @"Microsoft", @"HP", @"Cisco", nil];
childArray2 = [[NSMutableArray alloc] init];
parentArray = [[NSMutableArray alloc] initWithObjects:childArray1, nil];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [parentArray count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger rowCount ;
if (section == 0)
{
rowCount = [childArray1 count];
}
else
{
rowCount = [childArray2 count];
}
return rowCount;
}
从服务器下载内容后。
if([childArray2 count] > 0)
[parentArray addObject : childArray2];
[tableView reloadData];
这应该适合你。