I am trying to delete a row in a UITableView which is populated from a SQL database.
The sql statement I am using is from a class called databaseHanderClass
. The method takes an integer which is the id to delete a row in the database - the primary key.
-(BOOL) deleteFromDatabase: (NSInteger)delete_id
{
FMDatabase *dbHandler = [FMDatabase databaseWithPath: [Utility getDatabasePath]];
BOOL success;
@try
{
[dbHandler open];
success = [dbHandler executeUpdate:@"DELETE FROM inputs WHERE id=%d", delete_id];
[dbHandler close];
}
@catch (NSException *exception)
{
NSLog(@"fejl...%@", exception);
}
@finally
{
return success;
}
}
The method I am using for deletion in the UITableView is the following.
- (void)tableView:(UITableView *)tableView commitEditingStyle (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert)
{
//statement
}
}
You need to implement the following methods: THIS SHOULD WORK
For your database code, try:
-(BOOL) deleteFromDatabase: (NSInteger)delete_id
{
FMDatabase *dbHandler = [FMDatabase databaseWithPath: [Utility getDatabasePath]];
BOOL success = NO;
if(![dbHandler open])
{
NSLog(@"Could not open DB");
return NO;
}
[dbHandler beginTransaction];
success = [dbHandler executeUpdate:@"DELETE FROM inputs WHERE id = ?",
[NSNumber numberWithInt:delete_id]];
[dbHandler commit];
[dbHandler close];
return success;
}
For "commitEditingStyle" method, try the following:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSInteger row_number_to_be_deleted = indexPath.row;
//call method to delete from database
[DatabaseHandler deleteFromDatabase:row_number_to_be_deleted];
//now, fetch all details from Database
self.dataSource = [DatabaseHandler getAllData];
[tableView reloadData];
}
For "NumberOfRowsInSection":
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.dataSource count];
}
For "canEditRowAtIndexPath":
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
For "editingStyleForRowAtIndexPath":
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Editing Style-DELETE %i", [indexPath row]);
return UITableViewCellEditingStyleDelete;
}
For "commitEditingStyle":
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Do whatever data deletion you need to do...
// Delete the row from the data source
/* This HAS to be changed by YOU */
Employee* emp = [self.dataSource objectAtIndex:[indexPath row]];
NSLog(@"Delete row %i", [indexPath row]);
[DataEngine removeData:emp];
[self.dataSource removeObjectAtIndex:[indexPath row]];
}
[self.tableView reloadData];
}