UITableView编辑怀疑

时间:2012-03-01 10:19:35

标签: iphone objective-c ios uitableview

我有这段代码用于删除数据库中的单元格内容

- (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];
}

但是我收到了这个错误:"未声明的标识符索引路径"。怎么解决这个问题?

5 个答案:

答案 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 ...试试吧..