当我滑动删除时,表格单元格崩溃。获取错误的访问错误

Posted

技术标签:

【中文标题】当我滑动删除时,表格单元格崩溃。获取错误的访问错误【英文标题】:table cell crashes when i swipe to delete. Getting bad access error 【发布时间】:2013-03-13 16:36:31 【问题描述】:

当我滑动删除时,我的表格视图上不断出现此错误,通用编辑按钮将其置于编辑模式,我可以用它很好地删除它,但如果我滑动一个单元格,它会崩溃并返回错误的访问错误.我假设某处存在一些数据对话错误,但我不明白。我可以使用编辑并点击单元格将其删除,但滑动会使其崩溃。我有这个创建表视图的视图控制器。代码如下:

在我的视图控制器中我有这个代码:

-(void)viewWillAppear:(BOOL)animated

    [self controllerSetup];



-(void)controllerSetup



        firstController = [[TeacherSplitTableController alloc] initWithStyle:UITableViewStyleGrouped];
        [firstTable setDataSource:firstController];
        [firstTable setDelegate:firstController];
        firstController.view = firstController.tableView;
        [firstController setDelegate:self];
        [self tableSetUp];



-(IBAction)edit:(id)sender

    if (!editting) 
            editting = YES;
            self.navigationItem.hidesBackButton = YES;
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(Add:)];
        //Displays add button over the back button
            [self.firstTable setEditing:YES animated:YES];
     else 
            editting = NO;
            self.navigationItem.hidesBackButton = NO;
        self.navigationItem.leftBarButtonItem = NO;
            [self.firstTable setEditing:NO animated:YES];
    


teachersplittablecontroller 代码在这里:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

    if (editingStyle == UITableViewCellEditingStyleDelete) 
        // Delete the row from the data source

        [self openDB];
        NSString *sql = [NSString stringWithFormat:@"DELETE FROM Children WHERE Name = '%@' ",[listofnames objectAtIndex:indexPath.row]]; //Queries table for the childs name and returns more data.
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(Childdb, [sql UTF8String], -1, &statement, nil)==SQLITE_OK)
                    while (sqlite3_step(statement)==SQLITE_ROW) 
                    
        


        [listofnames removeObjectAtIndex:indexPath.row];
        [listoftickets removeObjectAtIndex:indexPath.row];
        //[theDataObject.names removeObjectAtIndex:indexPath.row];
        //[theDataObject.totaltickets removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
       
    else if (editingStyle == UITableViewCellEditingStyleInsert) 
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
       


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

    // Return NO if you do not want the specified item to be editable.
    return YES;

*/

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
    [super setEditing:editing animated:animated];
    [self setEditing:editing animated:YES];



试图保持代码精简并与问题相关。如果您需要更多代码,请询问。但我看不到问题:(感谢所有帮助:)

【问题讨论】:

【参考方案1】:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
    [super setEditing:editing animated:animated];
    [self setEditing:editing animated:YES];

在我看来就像一个不错的无限循环。

在应用崩溃之前是否有一些计算时间? 如果没有 - 你是否启用了僵尸?

【讨论】:

实际上,xcode 处理崩溃大约需要 2 秒。启用僵尸? - 大声笑 你是说模拟器,不是xcode?好吧,如果需要一些时间,那么我会假设是循环导致了它。你真的看到那里的循环吗?关于僵尸……你知道我指的是什么吗?这是一个不错的选择,其中释放的对象不会在调试模式下重新使用,并且访问它会创建一个常规异常,以便更容易追踪根本原因。虽然名字很奇怪,但很有用。 不,在我的 iPad 上,这就是我用来测试它的东西。 xcode 需要大约 2 秒来响应崩溃,通常是即时的。但是,我也在其他视图控制器上使用此代码。为什么当我刷单元格时它会崩溃,并且刷单元格甚至会调用此方法? 你能在模拟器上也重复一遍还是只在设备上发生? 它也发生在模拟器上。没有变化,不过响应崩溃需要更长的时间

以上是关于当我滑动删除时,表格单元格崩溃。获取错误的访问错误的主要内容,如果未能解决你的问题,请参考以下文章

在uitableview单元格上留下滑动删除按钮打开然后返回导致崩溃

带有核心数据删除错误的 NSFetchedResultsController

滑动删除 UITableView 单元格动画在 swift 2 中不起作用

应用程序崩溃。当我从自定义表格单元格下载视频的第二个索引时

从 UITableViewController 中删除表格单元格会导致崩溃?

UI测试滑动删除表格视图单元格