这是我的问题:
我有一个NSMutableArray *notes
,我的UITableView* _gradesTV
来源。
我在这里添加了方法- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"%ld", (long)indexPath.section);
NSLog(@"%@", notes);
[_gradesTV beginUpdates];
[notes removeObjectAtIndex:indexPath.section];
[_gradesTV deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationFade];
[_gradesTV endUpdates];
NSLog(@"%@", notes);
}
[_gradesTV reloadData];
}
但是当我删除一个元素时,我收到了这个错误:
*** Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
但我在MutableArray上制作的NSLog向我展示了3个元素......
笔记中的行removeObjectAtIndex
(MutableArray)使我的应用程序崩溃,就像它被执行了两次......
感谢您的帮助......
如果你想拉动项目并试试......
您必须使用+按钮创建成绩,然后您可以尝试删除表格视图中的项目。
添加成绩时,第一个TextField为string
,第二个为double
值,第三个值为double
值。
答案 0 :(得分:0)
尝试使用以下代码..
- (NSInteger)numberOfSections {
return [notes count];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"%ld", (long)indexPath.section);
NSLog(@"%@", notes);
[notes removeObjectAtIndex:indexPath.section];
NSLog(@"%@", notes);
}
[_gradesTV reloadData];
}
答案 1 :(得分:0)
首先删除UITableView's
beginUpdates
和endUpdates
其次删除UITableView's
reloadData
,因为在使用UITableViewCellEditingStyleDelete
和UITableViewCellEditingStyleInsert
现在您的代码将是:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"Current Section : %ld", (long)indexPath.section);
NSLog(@"Before : %@", notes);
[notes removeObjectAtIndex:indexPath.section];
// Either delete some rows within a section (leaving at least one) or the entire section.
id sectionDataSource = [notes objectAtIndex:indexPath.section];
if ([sectionDataSource count] > 0)
{
// Section is not yet empty, so delete only the current row.
[_gradesTV deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
else
{
// Section is now completely empty, so delete the entire section.
[_gradesTV deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationFade];
}
NSLog(@"After : %@", notes);
}
}
答案 2 :(得分:0)
问题是你要删除部分而不是行。
[notes removeObjectAtIndex:indexPath.section];
应为[notes removeObjectAtIndex:indexPath.row];
同样[_gradesTV deleteSections
应为[_gradesTV deleteRow...
注意: 您应该使用[_gradesTV deleteRow...
或[_gradesTV reloadData];
因为两者都没用。我想说只需使用[_gradesTV deleteRow...
也不确定beginUpdates
& endUpdates
是为了什么。删除不必要的东西。
答案 3 :(得分:0)
好的,我想从哪里来了我的错误,只是因为我没有使用相同的MutableArray来获得部分的数量......
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [notes count];
}
旧方法有一个旧的NSMutableArray我用来测试我的代码......
非常感谢大家,即使我自己也不注意这一点......