Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从UITableView中删除UITableViewCell_Ios_Uitableview_Fmdb - Fatal编程技术网

Ios 从UITableView中删除UITableViewCell

Ios 从UITableView中删除UITableViewCell,ios,uitableview,fmdb,Ios,Uitableview,Fmdb,我正在使用fmdb管理一些显示在常规UITableView上的数据。我正在尝试使用以下代码删除一个单元格: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingS

我正在使用fmdb管理一些显示在常规UITableView上的数据。我正在尝试使用以下代码删除一个单元格:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];


        [db open];

        [db beginTransaction];

        NSString * stringtoInsert = [NSString stringWithFormat: @"DELETE FROM TTLogObject WHERE id='%@'", [idArray objectAtIndex:indexPath.row]];

        BOOL success = [db executeUpdate:stringtoInsert];

        if (!success)
        {
            NSLog(@"insert failed!!");
        }

        NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);

        [db commit];

        [db close];

        [self getList];
    }
}
下面是我正在使用的viewDidLoad和getList函数的代码

   - (void)viewDidLoad
{
    [super viewDidLoad];

     self.navigationController.navigationBar.tintColor = [UIColor blackColor];

    shipperCityArray = [[NSMutableArray alloc] init];
    pickupDateArray = [[NSMutableArray alloc] init];
    paidArray = [[NSMutableArray alloc] init];
    idArray = [[NSMutableArray alloc] init];

    //NSString *path  = [[NSBundle mainBundle] pathForResource:@"tt" ofType:@"db"];


    [self getList];

}

- (void)getList
{
    db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
    [shipperCityArray removeAllObjects];
    [pickupDateArray removeAllObjects];
    [paidArray removeAllObjects];
    [idArray removeAllObjects];

    [db open];

    FMResultSet *fResult= [db executeQuery:@"SELECT * FROM TTLogObject"];


    while([fResult next])
    {
        [shipperCityArray addObject:[fResult stringForColumn:@"shipperCity"]];
        [pickupDateArray addObject:[fResult stringForColumn:@"pickupDate"]];
        [paidArray addObject:[NSNumber numberWithBool:[fResult boolForColumn:@"paid"]]];
        [idArray addObject:[NSNumber numberWithInteger:[fResult intForColumn:@"id"]]];
        NSLog(@"%@", [NSNumber numberWithInteger:[fResult intForColumn:@"id"]]);
    }


    [db close];

    [self.tableView reloadData];
}
问题是数据从数据库中删除得很好。但是,按下delete键后,表格视图不再显示任何单元格。当我重新启动应用程序时,会再次加载正确的数据,而被删除的单元格实际上已经不存在了。我怀疑这与章节中的行数有关

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%i", [shipperCityArray count]);
    return [shipperCityArray count];
}
当应用程序启动时,它会打印适当数量的单元格,但当点击delete时,它不会打印任何内容,并且似乎不会被调用


我曾尝试使用
[self.tableView beginUpdates]
[self.tableView endUpdates]
,但这些似乎错误地指出了删除后产生的错误项数。我不知道如何解决这个问题。如果我必须使用BeginUpdate和EndUpdate,有没有人能向我解释一下应该如何正确执行,以及实际发生了什么?

您需要明确地告诉tableView您正在删除单元格,而不是调用reloadData。替换

[self.tableView reloadData];


您应该在CommittedItingStyle方法中调用它。

我正在尝试使用它,我应该传递什么到deleteRowsAtIndexPaths?现在,如果我将代码行保持原样,我将得到以下错误:-[NSIndexPath计数]:无法识别的选择器发送到实例0x7566e50 2013-08-19 22:57:28.808卡车跟踪程序[13861:c07]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSIndexPath计数]:无法识别的选择器发送到实例0x7566e50'它需要一个索引路径数组,而不是一个,因此您必须给它一个单元素数组。我刚刚更新了,很抱歉。啊,我试过了。如果我按图中所示操作,它会告诉我:**由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:“无效更新:第0节中的行数无效。”。更新(2)后现有节中包含的行数必须等于更新(2)前该节中包含的行数,加上或减去从该节中插入或删除的行数(0插入,1删除),加上或减去移入或移出该节的行数(0移入,0移出).'您需要在调用getList方法后调用它,以便count方法返回正确的元素数。嗯,我只是不太幸运,现在它给了我以下信息:**在-[UITableView\u endCellAnimationsWithContext:]中断言失败,/SourceCache/UIKit_Sim/UIKit-2380.17/UITableView.m:862 2013-08-19 23:06:22.926货运跟踪器[14743:c07]***由于未捕获的异常“nsInternalInconsistenceException”而终止应用程序,原因是:“尝试从第0节中删除第3行,该节在更新之前仅包含3行”
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];