我正在使用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];
}
问题是数据从数据库中删除得很好。但是,按下删除后,表视图不再显示任何单元格。当我重新启动应用程序时,再次加载正确的数据,删除的单元格实际上已经消失。我怀疑它与numberOfRowsInSection
有关。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%i", [shipperCityArray count]);
return [shipperCityArray count];
}
当应用程序启动时,它会打印适当数量的单元格,但是当点击删除时,它不会打印任何内容,并且似乎不会被调用。
我试图使用[self.tableView beginUpdates]
和[self.tableView endUpdates]
,但这些似乎错误地说明删除后产生的错误数量的内容。我不知道如何解决这个问题。如果我必须使用beginUpdates和endUpdates,有人可以向我解释这应该如何正确完成,以及实际发生了什么?
答案 0 :(得分:4)
您需要明确告诉您的tableView删除单元格,而不是调用reloadData。取代
[self.tableView reloadData];
带
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
您应该在commitEditingStyle方法中调用它。