我的应用程序中有一个可编辑的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];
}
}
答案 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。 现在工作正常。
感谢大家回复!