这对我来说很好!
- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)targetIndexPath{
// Define las variables a utilizar: IDorigen hace referencia al ID que tiene la fila antes de moverse e IDDestino hace referencia al ID que va a tener la fila luego de moverse
int IDorigen = (int)[sourceIndexPath row]+1;
int IDdestino = (int)[targetIndexPath row]+1;
int diferencia;
// Define la variable de consulta sobre la base de datos
NSString *consulta;
// Si el IDorigen es menor al IDdestino (es decir, mueve una fila hacia abajo)
if (IDorigen < IDdestino)
{
// Obtiene la diferencia para saber cuantas filas hay entre IDdestino e IDOrigen
diferencia = IDdestino - IDorigen;
// Hace un FOR desde cero hasta diferencia, y a cada fila que encuentra le pone el ID=9000+i. Esto se hace para mandar las filas invoulucradas en el movimientohacia abajo de todo y evitar conflictos de ID
for (int i=0;i<diferencia;i++){
// Define la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d", 9000+i,IDorigen+1+i];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
}
// Cuando finaliza el FOR, le asigna a la fila que se está moviendo, el IDdestino deseado definiendo la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d", IDdestino,IDorigen];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
// Hace un FOR para asignarle el valor que corresponde a aquellas filas que se le asigno el ID=9000+i
for (int i=0;i<diferencia;i++){
// Define la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d",IDorigen+i,9000+i];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
}
// Si el IDorigen es mayor al IDdestino (es decir, mueve una fila hacia arriba)
}else if (IDorigen > IDdestino){
// Obtiene la diferencia para saber cuantas filas hay entre IDdestino e IDOrigen
diferencia = IDorigen - IDdestino;
// Hace un FOR desde cero hasta diferencia, y a cada fila que encuentra le pone el ID=9000+i. Esto se hace para mandar las filas involucradas en el movimiento hacia abajo de todo y evitar conflictos de ID
for (int i=0;i<diferencia;i++){
// Define la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d", 9000+i,IDdestino+i];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
}
// Cuando finaliza el FOR, le asigna a la fila que se está moviendo, el IDdestino deseado definiendo la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d", IDdestino,IDorigen];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
// Hace un FOR para asignarle el valor que corresponde a aquellas filas que se le asigno el ID=9000+i
for (int i=0;i<diferencia;i++){
// Define la consulta
consulta = [NSString stringWithFormat:@"update homeTabla set ID=%d where ID=%d",IDdestino+1+i,9000+i];
// Ejecuta la consulta
[self.dbTouchMeCIS executeQuery:consulta];
}
}
// Recarga la base de datos en la tabla una vez finalizado el movimiento
[self recargarDatos];
}