我有这段代码用于删除数据库中的单元格内容
- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[appDelegate.indexArray removeObjectAtIndex:indexPath.section];
[appDelegate.notesArray removeObjectAtIndex:indexPath.section];
[tableViewObj reloadData];
NSString *DataPath = [MyBibleAppAppDelegate getPath];
[appDelegate.data writeToFile:DataPath atomically:YES];
[tableViewObj reloadData];
}
}
它工作得很完美,但我需要将上面的代码放在我的按钮点击中,我把它放在按钮点击
-(IBAction)_clickbtndeltNoteall:(id)sender
{
[appDelegate.indexArray removeObjectAtIndex:indexPath.section];
[appDelegate.notesArray removeObjectAtIndex:indexPath.section];
[tableViewObj reloadData];
NSString *DataPath = [MyBibleAppAppDelegate getPath];
[appDelegate.data writeToFile:DataPath atomically:YES];
[tableViewObj reloadData];
}
但是我收到了这个错误:"未声明的标识符索引路径"。怎么解决这个问题?
答案 0 :(得分:1)
单击按钮时要删除哪个单元格?
添加:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowToDelete inSection:sectionToDelete];
在您的方法的顶部。
答案 1 :(得分:1)
indexPath
未在_clickbtndeltNoteall
中定义,这就是您收到该错误的原因。
您可以执行类似
的操作-(IBAction)_clickbtndeltNoteall:(id)sender
{
[appDelegate.indexArray removeObjectAtIndex:index];
[appDelegate.notesArray removeObjectAtIndex:index];
[tableViewObj reloadData];
NSString *DataPath = [MyBibleAppAppDelegate getPath];
[appDelegate.data writeToFile:DataPath atomically:YES];
[tableViewObj reloadData];
}
其中index
在其他地方定义(例如,类字段)。您可以使用辅助方法设置index
以指定要删除的部分,然后调用_clickbtndeltNoteall
答案 2 :(得分:1)
我建议在单例中保存压缩行的indexPath。以下是有关如何使用singleton class存储对象并在各个类中使用它们的指南。
在此示例中,您还可以声明一个实例变量,并在 UITableView 的相应委托方法中按下该行时设置它。这可以这样做:
@interface
NSIndexPath *tableViewPath;
@implementation
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
tableViewPath = indexPath;
}
您对按钮的操作现在应如下所示:
- (IBAction)_clickbtndeltNoteall:(id)sender
{
[appDelegate.indexArray removeObjectAtIndex:indexPath.section];
[appDelegate.notesArray removeObjectAtIndex:indexPath.section];
[tableViewObj reloadData];
NSString *DataPath = [MyBibleAppAppDelegate getPath];
[appDelegate.data writeToFile:DataPath atomically:YES];
[tableViewObj reloadData];
}
按钮的代码假定在按下之前已选择了一行。您还可以在 viewDidLoad 中初始化 indexPath 像这样:
@implementation
- (void)viewDidLoad {
tableViewPath = [NSIndexPath indexPathForRow:0 inSection:0];
}
您应该将初始化调整为适合您特定程序的初始化!
答案 3 :(得分:0)
您正在访问 - (IBAction)_clickbtndeltNoteall:(id)发件人中的indexPath变量,而这是不可能的,因为该变量在该范围内不存在。
为什么不将最后一个indexPath存储在全局变量中,然后才能访问它?像这样:
- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
lastIndexPath = indexPath;
//Your code
}
}
在你的interfaz宣言中,你提出:
NSIndexPath *lastIndexPath;
答案 4 :(得分:0)
-(IBAction)_clickbtndeltNoteall:(id)sender
{
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *clickedButtonPath = [tableViewObj indexPathForCell:clickedCell];
int section1=clickedButtonPath.section;
[appDelegate.indexArray removeObjectAtIndex:section1];
[appDelegate.notesArray removeObjectAtIndex:section1];
[tableViewObj reloadData];
NSString *DataPath = [MyBibleAppAppDelegate getPath];
[appDelegate.data writeToFile:DataPath atomically:YES];
[tableViewObj reloadData];
}
如果按钮在单元格本身上肯定会有效。如果按钮不在单元格上,那么你可以直接传递索引路径而不指定uitableviewcell ...试试吧..