Antes de seguir con este tutorial te recomendamos que consultes la priemera parte de este tutorial ya que partiremos del punto en el que lo dejamos.
Además, si quieres seguir aprendiendo a desarrollar en iOS te recomendamos que consultes la página de nuestro curso de desarrollo en iOS.
En esta segunda parte del tutorial, aprenderemos cómo realizar inserciones, modificaciones y borrados de datos en nuestra base de datos de vehículos. Para ello, completaremos la clase VehiculoDAO
añadiendo los métodos necesarios. A continuación se muestra el código fuente que debemos añadir:
(void)crearVehiculo:(NSString *)nombre ruedas:(NSInteger)ruedas;
(void)actualizarVehiculo:(NSInteger)vehiculoID nombre:(NSString *)nombre ruedas:(NSInteger)ruedas;
(void)borrarVehiculo:(NSInteger)vehiculoID;
(void)crearVehiculo:(NSString *)nombre ruedas:(NSInteger)ruedas {
NSString *ubicacionDB = [self obtenerRutaBD];
if (!(sqlite3_open([ubicacionDB UTF8String], &bd) == SQLITE_OK)) {
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlInsert = [NSString stringWithFormat:@"INSERT INTO vehiculo (nombre_vehiculo, numero_ruedas) VALUES ('%@', %d)", nombre, ruedas];
const char *sql = [sqlInsert UTF8String];
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problema al preparar el statement");
return;
} else {
if (sqlite3_step(sqlStatement) == SQLITE_DONE) {
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}
(void)actualizarVehiculo:(NSInteger)vehiculoID nombre:(NSString *)nombre ruedas:(NSInteger)ruedas {
NSString *ubicacionBD = [self obtenerRutaBD];
if (!(sqlite3_open([ubicacionBD UTF8String], &bd) == SQLITE_OK)) {
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlUpdate = [NSString stringWithFormat:@"UPDATE vehiculo SET nombre_vehiculo = '%@', numero_ruedas = %d WHERE id = %d", nombre, ruedas, vehiculoID];
const char *sql = [sqlUpdate UTF8String];
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problema al preparar el statement.");
return;
} else {
if (sqlite3_step(sqlStatement) == SQLITE_DONE) {
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}
(void)borrarVehiculo:(NSInteger)vehiculoID {
NSString *ubicacionBD = [self obtenerRutaBD];
if (!(sqlite3_open([ubicacionBD UTF8String], &bd) == SQLITE_OK)) {
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlDelete = [NSString stringWithFormat:@"DELETE FROM vehiculo WHERE id = %d", vehiculoID];
const char *sql = [sqlDelete UTF8String];
sqlite3_stmt *sqlStatement;
if (sqlite3_prepare_v
2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problema al preparar el statement.");
return;
} else {
if (sqlite3_step(sqlStatement) == SQLITE_DONE) {
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}
Estos métodos siguen una estructura similar al método de consulta, lo único que cambia es la sentencia SQL que se ejecuta y el procesamiento final.
Ahora nos dirigiremos al storyboard y añadiremos un nuevo ViewController
. A este ViewController
le añadiremos dos etiquetas (UILabel
), dos campos de texto (UITextField
) y un botón (UIButton
).
A continuación, crearemos una nueva clase en nuestro proyecto llamada AltaVehiculoViewController
y la asociaremos en el storyboard a este nuevo ViewController
. Una vez renombrada la clase, definiremos los IBOutlet necesarios y el IBAction correspondiente para el alta de un nuevo elemento. También crearemos un objeto de tipo VehiculoDAO
, que nos permitirá conectarnos a la base de datos y ejecutar las operaciones necesarias. En el método viewDidLoad
, inicializaremos el objeto dao
y estará listo para su uso. Ahora solo queda programar el proceso de alta, para ello utilizaremos el siguiente código:
#import <UIKit/UIKit.h>
#import "VehiculoDAO.h"
@interface AltaVehiculoViewController : UIViewController
@property (nonatomic, strong) IBOutlet UILabel *etqNombre;
@property (nonatomic, strong) IBOutlet UILabel *etqRuedas;
@property (nonatomic, strong) IBOutlet UITextField *txtNombre;
@property (nonatomic, strong) IBOutlet UITextField *txtRuedas;
@property (nonatomic, strong) IBOutlet UIButton *btnCrear;
@property (nonatomic, strong) VehiculoDAO *dao;
- (IBAction)ocultarTeclado:(id)sender;
- (IBAction)crearNuevoVehiculo:(id)sender;
@end
#import "AltaVehiculoViewController.h"
@implementation AltaVehiculoViewController
@synthesize etqNombre;
@synthesize etqRuedas;
@synthesize txtNombre;
@synthesize txtRuedas;
@synthesize btnCrear;
@synthesize dao;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[txtNombre resignFirstResponder];
[txtRuedas resignFirstResponder];
[super touchesBegan:touches withEvent:event];
}
- (void)viewDidLoad {
dao = [[VehiculoDAO alloc] init];
[txtRuedas setKeyboardType:UIKeyboardTypeNumberPad];
[super viewDidLoad];
}
- (IBAction)ocultarTeclado:(id)sender {
// Acción para ocultar el teclado
}
- (IBAction)crearNuevoVehiculo:(id)sender {
NSString *nombre = [NSString stringWithFormat:@"%@", txtNombre.text];
NSInteger ruedas = [txtRuedas.text integerValue];
[dao crearVehiculo:nombre ruedas:ruedas];
}
@end
Realiza las conexiones correspondientes en el storyboard, asegurándote de asociar todos los métodos (incluyendo el de ocultar el teclado). Con esto, la clase estará lista.
Volvemos al storyboard y en el TableViewController
añadire
mos un botón tipo Bar Button Item en la barra de navegación. Luego, uniremos este botón con el ViewController
que acabamos de añadir mediante un segue de tipo Push. Para ello, seleccionamos el botón y, manteniendo presionada la tecla Control, arrastramos el ratón hacia el controlador de destino. En el menú desplegable que aparece, seleccionamos Push y así quedará vinculado el TableViewController
con el ViewController
de altas.
Ahora nos dirigimos al ViewController
que utilizamos en la primera parte como detalle de datos y le añadimos dos botones (UIButton
), uno para modificar y otro para borrar. También editaremos la clase ModVehiculoViewController
para agregar estos dos botones y los dos nuevos métodos, uno para borrar y otro para modificar un vehículo. El siguiente código muestra las modificaciones necesarias:
@interface ModVehiculoViewController : UIViewController
@property (nonatomic, strong) IBOutlet UIButton *btnModificar;
@property (nonatomic, strong) IBOutlet UIButton *btnBorrar;
- (IBAction)modificarVehiculo:(id)sender;
- (IBAction)borrarVehiculo:(id)sender;
@end
@implementation ModVehiculoViewController
@synthesize btnModificar;
@synthesize btnBorrar;
- (IBAction)modificarVehiculo:(id)sender {
NSInteger vehiculoID = vehiculo.vehiculoID;
NSString *nombre = txtNombre.text;
NSInteger numRuedas = [txtRuedas.text integerValue];
[dao actualizarVehiculo:vehiculoID nombre:nombre ruedas:numRuedas];
}
- (IBAction)borrarVehiculo:(id)sender {
NSInteger vehiculoID = vehiculo.vehiculoID;
[dao borrarVehiculo:vehiculoID];
}
@end
Realiza las conexiones correspondientes en el storyboard, incluyendo los actions que se lanzarán al presionar cada botón. Con esto, el ViewController
estará listo para modificar y borrar datos.
Una vez realizadas todas estas acciones, tendrás una aplicación lista para realizar altas, bajas, modificaciones y consultas en una base de datos SQLite. Para brindar más información, puedes agregar una alerta después de cada operación que implique cambios en la base de datos.
En conclusión, en este tutorial hemos aprendido cómo utilizar SQLite en una aplicación iOS para realizar operaciones básicas de creación, lectura, actualización y eliminación de datos. Hemos visto cómo configurar la base de datos, crear una clase DAO para interactuar con ella y cómo implementar las funcionalidades de consulta, alta, modificación y borrado en nuestras vistas.
Además, hemos explorado la navegación entre vistas y cómo utilizar segues para pasar datos entre ellas. También hemos agregado mejoras adicionales, como la validación de datos y la presentación de alertas para brindar retroalimentación al usuario.
Si deseas profundizar en el desarrollo de aplicaciones iOS, te invitamos a consultar nuestro curso de desarrollo en iOS en nuestra página web. Allí encontrarás recursos y tutoriales adicionales para ampliar tus conocimientos y seguir avanzando en el emocionante mundo del desarrollo de aplicaciones móviles.
¡Esperamos que este tutorial haya sido útil y te inspire a seguir explorando y desarrollando tus habilidades en iOS!