Я использую 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, может ли кто-нибудь объяснить мне, как это должно быть сделано правильно и что на самом деле происходит?