}

11/2/14

Tutorial De Una Base De Datos SQLite iOS | iOS | iPhone | iPad


Te mostraremos un tutorial como crear una base de datos en SQLite iOS | iOS | iPhone | iPad

OS y SQLite hacen una combinación poderosa para la construcción de datos persistente iPad, iPhone o aplicaciones móviles iPod Touch. El SDK de iOS ofrece soporte nativo para SQLite a través del uso del lenguaje de programación C. Este tutorial te guiará a través de cómo configurar una aplicación de base de datos SQLite y para leer el texto y las imágenes de la base de datos en una escena.

Crear la base de datos

Crear IOS 5 Proyecto
Configure SQLite
Crear un nuevo grupo (Archivo | Nuevo grupo) o del (Context Menu | Nuevo grupo). El nombre de "Modelo". A continuación, cree dos archivos de aplicación de Objective-C y ficheros de cabecera correspondientes. Seleccione el grupo modelo y en el menú Archivo o en el menú contextual | seleccionar Nuevo archivo.Seleccione el nodo de Objective-C y después la plantilla de clase Objective-C. Dé su archivo un nombre: carta de vinos (si usted está siguiendo este tutorial), seleccione NSObject como la subclase y crear el archivo. Repita el proceso para el siguiente conjunto de archivos: MyWineList, (o puede elegir un nombre como WinesDAO). Seleccione de nuevo el NSObject como la subclase y crear el archivo (Figura 9). Para la clase winelist crear cuatro propiedades en el archivo WineList.h (cabecera), uno para cada columna de la wineTbl (Figura 10):
A continuación abra el archivo WineList.m (aplicación) para configurar los métodos getter y setter. Así que su carta de vinos debe contener cuatro @ sintetizar declaraciones, uno de cuatro de cada propiedad (Figura 11).
NSMutableArray * wineArray = [[NSMutableArray alloc] init]; 
@ try { 
NSFileManager * filemgr = [NSFileManager defaultManager]; 
NSString * dbPath = [[[NSBundle mainBundle] ResourcePath] stringByAppendingPathComponent: @ "IOSDB.sqlite"]; 
éxito BOOL = [filemgr fileExistsAtPath: dbPath]; 
...
El dbPath contendrá el nombre del archivo y la ruta de la base de datos SQLite, que se pasa a la filemgr. Si el archivo se encuentra, el éxito será cierto. Siguiente prueba para ver si el archivo se encuentra y si no se registrará un error. La siguiente operación intentará abrir la base de datos, sqlite3_open antes de configurar la instrucción Select y sql3_stmt:

El dbPath contendrá el nombre del archivo y la ruta de la base de datos SQLite, que se pasa a la filemgr. Si el archivo se encuentra, el éxito será cierto. Siguiente prueba para ver si el archivo se encuentra y si no se registrará un error. La siguiente operación intentará abrir la base de datos, sqlite3_open antes de configurar la instrucción Select y sql3_stmt:
if (success!) 

NSLog (@ "No se puede localizar el archivo de base de datos '% @'.", dbPath); 

if ((sqlite3_open ([dbPath UTF8String], y db) == SQLITE_OK)!) 

NSLog (@ "Un error ha ocurrido ");. 

const char * sql = "SELECT id, Vino, Clasificación, foto De WineTbl"; 
sqlite3_stmt * SqlStatement; 
if (sqlite3_prepare (db, sql, -1, y SqlStatement, NULL) = SQLITE_OK)! 

NSLog (@ "problema con preparar la declaración"); 

...
Si la base de datos se abre correctamente, la sqlite3_prepare intentará ejecutar el SqlStatement. Si la sentencia se ejecuta con éxito dando lugar a un conjunto de resultados que se devuelve, a continuación, ejecutar un bucle while para recorrer el conjunto de resultados de asignar los valores a los campos NSMutableArray. ...while (sqlite3_step (SqlStatement) == SQLITE_ROW) { winelist * MyWine = [[alloc winelist] init]; MyWine.wineId = sqlite3_column_int (SqlStatement, 0); MyWine.wine = [NSString stringWithUTF8String: (char *) sqlite3_column_text (SqlStatement, 1)]; MyWine.rating = [NSString stringWithUTF8String: (char * ) sqlite3_column_text (SqlStatement, 2)];const char * cruda = sqlite3_column_blob (SqlStatement, 3); int rawLen = sqlite3_column_bytes (SqlStatement, 3); NSData * = datos [dataWithBytes NSData: longitud cruda: rawLen]; MyWine.photo = [ [UIImage alloc] initWithData: Datos]; [wineArray addObject: MyWine]; } } @ catch (NSException * excepción) { NSLog (@ "Una excepción ocurrió:% @", [motivo excepción]); } @ {finalmente regresar wineArray ; } ... Esto casi se encarga de la de las operaciones CRUD. El siguiente paso consistirá en la creación de la interfaz de usuario, la creación de IBActions y conexiones IBOutlets.(Véase la Figura 12, 13).

Si la base de datos se abre correctamente, la sqlite3_prepare intentará ejecutar el SqlStatement. Si la sentencia se ejecuta con éxito dando lugar a un conjunto de resultados que se devuelve, a continuación, ejecutar un bucle while para recorrer el conjunto de resultados de asignar los valores a los campos NSMutableArray. ...while (sqlite3_step (SqlStatement) == SQLITE_ROW) { winelist * MyWine = [[alloc winelist] init]; MyWine.wineId = sqlite3_column_int (SqlStatement, 0); MyWine.wine = [NSString stringWithUTF8String: (char *) sqlite3_column_text (SqlStatement, 1)]; MyWine.rating = [NSString stringWithUTF8String: (char * ) sqlite3_column_text (SqlStatement, 2)];const char * cruda = sqlite3_column_blob (SqlStatement, 3); int rawLen = sqlite3_column_bytes (SqlStatement, 3); NSData * = datos [dataWithBytes NSData: longitud cruda: rawLen]; MyWine.photo = [ [UIImage alloc] initWithData: Datos]; [wineArray addObject: MyWine]; } } @ catch (NSException * excepción) { NSLog (@ "Una excepción ocurrió:% @", [motivo excepción]); } @ {finalmente regresar wineArray ; } ... Esto casi se encarga de la de las operaciones CRUD. El siguiente paso consistirá en la creación de la interfaz de usuario, la creación de IBActions y conexiones IBOutlets.(Véase la Figura 12, 13).
Crear la interfaz de usuario de Operaciones
[Self.winerating setText: (*) (carta de vinos [self.wines objectAtIndex: 0]). Puntuación];

[Súper viewDidLoad]; 

...

en el viewDidUnload establecer sus propiedades a cero para liberarlos de la memoria ... - (void) viewDidUnload { [self setWineViewer: nil]; [auto setWinename: nil]; [auto setWinerating: nil]; [súper viewDidUnload]; } ...Finalmente aplicar el método GetWineListing, de modo que cuando el usuario hace clic en el botón, el índice se incrementa y recupera los datos en el número de índice seleccionado. ... - (IBAction) GetWineListing: (id) {remitenteestática NSInteger currentIndex = 0; if (+ + currentIndex == [cuentan self.wines]) { currentIndex = 0;

} Else { 
winelist * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex]; 
[setText self.winename: aWine.wine]; 
[self.winerating setText: aWine.rating]; 
[self.wineViewer setImage: aWine. foto]; 


...

[Self.winerating setText: (*) (carta de vinos [self.wines objectAtIndex: 0]). Puntuación];
[Súper viewDidLoad]; 

...

en el viewDidUnload establecer sus propiedades a cero para liberarlos de la memoria ... - (void) viewDidUnload { [self setWineViewer: nil]; [auto setWinename: nil]; [auto setWinerating: nil]; [súper viewDidUnload]; } ...Finalmente aplicar el método GetWineListing, de modo que cuando el usuario hace clic en el botón, el índice se incrementa y recupera los datos en el número de índice seleccionado. ... - (IBAction) GetWineListing: (id) {remitenteestática NSInteger currentIndex = 0; if (+ + currentIndex == [cuentan self.wines]) { currentIndex = 0;

} Else { 
winelist * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex]; 
[setText self.winename: aWine.wine]; 
[self.winerating setText: aWine.rating]; 
[self.wineViewer setImage: aWine. foto]; 


...

[Súper viewDidLoad]; 

...
en el viewDidUnload establecer sus propiedades a cero para liberarlos de la memoria ... - (void) viewDidUnload { [self setWineViewer: nil]; [auto setWinename: nil]; [auto setWinerating: nil]; [súper viewDidUnload]; } ...Finalmente aplicar el método GetWineListing, de modo que cuando el usuario hace clic en el botón, el índice se incrementa y recupera los datos en el número de índice seleccionado. ... - (IBAction) GetWineListing: (id) {remitenteestática NSInteger currentIndex = 0; if (+ + currentIndex == [cuentan self.wines]) { currentIndex = 0;

} Else { 
winelist * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex]; 
[setText self.winename: aWine.wine]; 
[self.winerating setText: aWine.rating]; 
[self.wineViewer setImage: aWine. foto]; 


...

en el viewDidUnload establecer sus propiedades a cero para liberarlos de la memoria ... - (void) viewDidUnload { [self setWineViewer: nil]; [auto setWinename: nil]; [auto setWinerating: nil]; [súper viewDidUnload]; } ...Finalmente aplicar el método GetWineListing, de modo que cuando el usuario hace clic en el botón, el índice se incrementa y recupera los datos en el número de índice seleccionado. ... - (IBAction) GetWineListing: (id) {remitenteestática NSInteger currentIndex = 0; if (+ + currentIndex == [cuentan self.wines]) { currentIndex = 0;
} Else { 
winelist * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex]; 
[setText self.winename: aWine.wine]; 
[self.winerating setText: aWine.rating]; 
[self.wineViewer setImage: aWine. foto]; 


...

} Else { 
winelist * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex]; 
[setText self.winename: aWine.wine]; 
[self.winerating setText: aWine.rating]; 
[self.wineViewer setImage: aWine. foto]; 


...
Código Fuente
WineList.m
---------------------------------------------------
MyWineLists?
/ /
/ / MyWineLists.h
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import <Foundation/Foundation.h>
# Import <sqlite3.h>
@ MyWineLists interfaz: NSObject {
    sqlite3 * db;
}
- (NSMutableArray *) getMyWines;
@ End
MyWineLists?
/ /
/ / MyWineLists.h
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import <Foundation/Foundation.h>
# Import <sqlite3.h>
@ MyWineLists interfaz: NSObject {
    sqlite3 * db;
}
- (NSMutableArray *) getMyWines;
@ End
WineList.h?
/ /
/ / WineList.h
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import <Foundation/Foundation.h>
@ Interface carta de vinos: NSObject {
    NSInteger wineId;
    NSString * vino;
    NSString * Evaluación;
    UIImage * foto;
}
@ Property (no atómica, retener) NSString * vino;
@ Property (no atómica, asignar) NSInteger wineId;
@ Property (no atómica, retener) NSString * Evaluación;
@ Property (no atómica, retener) UIImage * foto;
@ End
MyWineLists.m?
/ /
/ / MyWineLists.m
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import "MyWineLists.h"
# Import "WineList.h"
@ MyWineLists implementación
- (NSMutableArray *) getMyWines {
    NSMutableArray * wineArray = [[NSMutableArray alloc] init];
    @ probar {
        NSFileManager * filemgr = [NSFileManager defaultManager];
        NSString * dbPath = [[[NSBundle mainBundle] ResourcePath] stringByAppendingPathComponent: @ "IOSDB.sqlite" ];
        BOOL success = [filemgr fileExistsAtPath: dbPath];
        si (! éxito)
        {
            NSLog (@ "No se puede localizar el archivo de base de datos '% @'." , dbPath);
        }
        si (! (sqlite3_open ([dbPath UTF8String], y db) == SQLITE_OK))
           {
               NSLog (@ "Ha ocurrido un error." );
           }
        const caracteres * sql = "SELECT id, Vino, Clasificación, foto De WineTbl" ;
        sqlite3_stmt * SqlStatement;
        si (sqlite3_prepare (db, sql, -1, y SqlStatement, NULL)! = SQLITE_OK)
           {
               NSLog (@ "problema con preparar la declaración" );
           }
         
        / /
        mientras que (sqlite3_step (SqlStatement) == SQLITE_ROW) {
            Carta de vinos * MyWine = [[alloc winelist] init];
            MyWine.wineId = sqlite3_column_int (SqlStatement, 0);
            MyWine.wine = [NSString stringWithUTF8String: ( Char *) sqlite3_column_text (SqlStatement, 1)];
            MyWine.rating = [NSString stringWithUTF8String: ( Char *) sqlite3_column_text (SqlStatement, 2)];
            const caracteres * cruda = sqlite3_column_blob (SqlStatement, 3);
            int rawLen = sqlite3_column_bytes (SqlStatement, 3);
            NSData * = datos [dataWithBytes NSData: longitud cruda: rawLen];
            MyWine.photo = [[UIImage alloc] initWithData: Datos];
            [WineArray addObject: MyWine];
        }
    }
    @ capturas (NSException * excepción) {
        NSLog (@ "Una excepción ocurrió:% @" , [motivo excepción]);
    }
    @ Finally {
        volver wineArray;
    }
     
     
}
@ End
kcbViewController?
/ /
/ / KcbViewController.h
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import <UIKit/UIKit.h>
@ Interface kcbViewController: UIViewController {
    NSMutableArray * vinos;
     
}
@ Propiedades (no atómica, retener) NSMutableArray * vinos;
@ Property (débil, no atómica) IBOutlet UIImageView * wineViewer;
@ Property (débil, no atómica) IBOutlet UILabel * winename;
@ Property (débil, no atómica) IBOutlet UILabel * winerating;
- (IBAction) GetWineListing: (id) del remitente;
@ End
kcbViewController.m?
/ /
/ / KcbViewController.m
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import "kcbViewController.h"
# Import "WineList.h"
# Import "MyWineLists.h"
@ KcbViewController aplicación
@ Sintetizar wineViewer;
@ Sintetizar winename;
Sintetizar @ winerating,
@ Sintetizar los vinos;
- ( void ) didReceiveMemoryWarning
{
    [Súper didReceiveMemoryWarning];
    / / Liberar todos los datos, imágenes en caché, etc, que no están en uso.
}
# Pragma mark - Vista del ciclo de vida
- ( void ) viewDidLoad
{
    MyWineLists * mywines = [[MyWineLists alloc] init];
    self.wines = [mywines getMyWines];
    [. Self.wineViewer setImage: ((carta de vinos *) [self.wines objectAtIndex: 0]) photo];
    [SetText self.winename: ((carta de vinos *) [self.wines objectAtIndex: 0]). Vino];
     
    [Self.winerating setText: (*) (carta de vinos [self.wines objectAtIndex: 0]). Puntuación];
      
    [Súper viewDidLoad];
}
- ( void ) viewDidUnload
{
    [Auto setWineViewer: nil];
    [Auto setWinename: nil];
    [Auto setWinerating: nil];
    [Súper viewDidUnload];
}
- (IBAction) GetWineListing: (id) {remitente
    estática NSInteger currentIndex = 0;
    si (+ + currentIndex == [cuentan self.wines]) {
        currentIndex = 0;
} más {
        Carta de vinos * aWine = (carta de vinos *) [self.wines objectAtIndex: currentIndex];
        [SetText self.winename: aWine.wine];
        [SetText self.winerating: aWine.rating];
        [Self.wineViewer setImage: aWine.photo];
    }
}
- ( void ) viewWillAppear: ( BOOL ) animada
{
    [Súper viewWillAppear: animado];
}
- ( void ) viewDidAppear: ( BOOL ) animada
{
    [Súper viewDidAppear: animado];
}
- ( void ) viewWillDisappear: ( BOOL ) animada
{
    [Súper viewWillDisappear: animado];
}
- ( void ) viewDidDisappear: ( BOOL ) animada
{
    [Súper viewDidDisappear: animado];
}
- ( BOOL ) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
    / / SÍ La vuelta de orientaciones compatibles
    volver (interfaceOrientation = UIInterfaceOrientationPortraitUpsideDown!);
}
@ End

Para empezar, tendrá que FireFox de Mozilla y el plugin Database Manager SQLite. Si no los tiene, se pueden descargar e instalar desde el sitio web FireFox. Una vez que Firefox se ha instalado, instale el Administrador de SQLite desde el Administrador de complementos. El SQLite Manager se puede iniciar desde el menú Firefox o el menú Herramientas, dependiendo de la versión que está utilizando (ver figura 1).

Haga clic en el nuevo botón de bases de datos (figura 2) para crear una nueva base de datos. Usted puede dar cualquier nombre significativo que desea. Tenga en cuenta, la extensión SQLite se añadirá automáticamente. Se le pide que guarde el archivo en el sistema de archivos, (naturalmente). Tome nota de dónde va a guardar, porque usted va a copiar el archivo más adelante en su proyecto. A continuación, haga clic en el nuevo botón de la tabla (figura 3) para crear una nueva tabla, una vez más voy a dejar a usted para nombrar algo útil. Para este tutorial, mi nombré la tabla wineTbl y he creado cuatro columnas: id [primario, AutoInc, enteros], winename [varchar], winerating [varchar] y wineimage [burbuja].


Crear una tabla 

 Crear las columnas necesarias

Por el bien de este tutorial, voy a rellenar previamente la base de datos con algunas entradas de vino y las imágenes de la web. Puede agregar datos seleccionando la tabla y seleccionando la pestaña de navegación y de datos.Para subir una imagen, haga clic en el icono de clip al lado del campo blob.(Figura 4 y en la figura 5). Ahora puede cerrar la base de datos desde el menú Firefox y Firefox, así, ya que no necesitaremos más para el tutorial.

 Agregar un nuevo registro en la base de datos

Listado de Registro en la base de datos
Inicie XCode 4.2 y crear una sola Ver IOS 5 aplicación. Déle un nombre significativo y seleccione Storyboard y ARC. Configure su Git, o no, el control de la fuente y completar la creación de su proyecto. (Figura 6).
Figura 6: La Lista de App Vino
Expanda la carpeta Marcos, haga clic derecho en uno de los marcos y seleccione Mostrar en Finder para abrir el Buscador en el lugar Marco. Usted tendrá que añadir el archivo libsqlite_3.0.dylib a su proyecto (figura 6), por lo que subir dos o tres niveles (ver Ir al Encerrando carpeta en el menú Finder) hasta llegar a la carpeta usr. Abrirlo y abra la carpeta lib. Desplácese hacia abajo hasta encontrar el sqlite_3.0.lib. Arrastre el archivo a sus marcos, teniendo cuidado de no copiar el archivo en los marcos, pero sólo crean una referencia (Figura 7). A continuación, seleccione la raíz del proyecto, haga clic derecho y seleccione Mostrar en Finder. Busque la base de datos SQL que ha creado en la primera parte de este tutorial y copiarlo en el grupo de proyecto en la que proyectas encabezado y archivos implementaciones son (Figura 8).

Copie el archivo de base de datos a la carpeta del proyecto

Operaciones DAO Configuración

·         wineId
·         vino
·         clasificación
·         foto

·         @ Sintetizar wineId;
·         @ Sintetizar vino;
·         @ Sintetizar calificación;
·         @ Sintetizar foto;


Figura 9: Crear la clase winelist


Figura 10: Crear la clase WineLists

Figura 11: La cabecera de carta de vinos

Crear Operaciones CRUD
Bueno CRUD es un poco exagerado. Para este tutorial en realidad es sólo una operación de R (lectura). Ok, ahora la aplicación se va a necesitar clases DAO para el CRUD (Leer) las operaciones, por lo que si aún no lo ha hecho, cree una nueva clase de Objective-C: MyWineLists o lo que quieras, siempre y cuando la declaración y las obras de ejecución. Para el archivo de cabecera MyWineLists, un objeto sqlite3 es declarado y un método NSMutableArray (figura 11):
·         db
·         getMyWines
Para implementar estos objetos, abra el archivo MyWineLists.m. En este archivo, la tripa si las operaciones se llevarán a cabo. Para comenzar a crear el método getMyWines NSMutableArray y agregue una variable puntero array:
·         wineArray
Siguiente declarar un objeto NSFileManager, un objeto NSString y un objeto Bool:
·         filemgr
·         dbPath
·         éxito
... 
·         sql
·         SqlStatement

... 

La ejecución de WineLists


Las operaciones CRUD

Comience por localizar y abrir el archivo de guión gráfico. Usted debe tener una sola escena en blanco (View Controller). Para esta parte, se requieren cuatro etiquetas (UILabel): uno para Vino Nombre y el valor de la base de datos y lo mismo para los otros dos: uno para Wine Valoración y el valor correspondiente de la base de datos que se almacena en el NSMutableArray. Para las imágenes, arrastre un UIImageView en la escena. Como paso final para la interfaz de usuario, arrastre un UIToolbar y colóquelo en la parte inferior de la pantalla y cambiar el nombre del botón incluido: Siguiente Botella (Figura 14).

Conexión de los puntos



La estructura del proyecto


Para finalizar la aplicación, algo de código necesita ser añadido a la cabecera ViewController y archivos de implementación. Así que para configurar el IBAction y IBOutlet, abra el archivo de cabecera junto con el guión gráfico haciendo clic en el Editor Adjunto, el icono de la cara en la barra de herramientas (Figura 14). Para empezar, seleccione la primera etiqueta y arrastrando una línea de conexión (Ctrl + botón del ratón a la izquierda) en el fichero de cabecera entre la última llave de cierre y la directiva @ end. En la ventana emergente, seleccione IBOutlet e introduzca un nombre como: winename. Continuar con la segunda etiqueta que contendrá la información de clasificación. Esto también será una IBOutlet y el nombre será: winerating. Para la imagen, repita la misma operación que los dos anteriores. Esta conexión también será un IBOutlet y el nombre será: wineViewer.Finalmente, arrastre una línea de conexión desde el botón en la barra de herramientas. 
Esta será una IBAction y el nombre del método: GetWineListing. También agregue un objeto NSMutableArray:
·         vinos
Usted debe haber poco lleno en punto en el margen que indica que se han realizado las conexiones. Siguiente Abrir el archivo de implementación. Configurar el getter y setters: ... @ sintetizar wineViewer; @ sintetizar winename; @ sintetizar winerating; @ sintetizar vinos; ... En el viewDidLoad, que se llama cuando la aplicación haya finalizado la inicialización de sí mismo, añadir punteros para contener los datos iniciales de la matriz de modo la aplicación mostrará un poco de información y la imagen que se encuentra en el índice 0. ... - (void) viewDidLoad { MyWineLists * mywines = [[MyWineLists alloc] init];self.wines = [mywines getMyWines]; [self.wineViewer setImage: ( (carta de vinos *) [self.wines objectAtIndex: 0]) de la fotografía];. [self.winename setText: ((carta de vinos *) [self.wines objectAtIndex: 0].) vino];
Pon a prueba tu App
Hemos terminado. Haga clic en el botón Ejecutar para iniciar la aplicación.Después de la aplicación ha terminado de inicializar usted debe tener a partir de datos y la imagen en la pantalla. Haga clic en el siguiente botella para obtener el siguiente listado.

Aquí está el código fuente completo de los diversos archivos que se crearon.

/ /
/ / WineList.m
/ / MyWineList
/ /
/ / Creado por Kevin Languedoc en 11/25/11.
/ / Copyright (c) 2011 kCodebook. Todos los derechos reservados.
/ /
# Import "WineList.h"
@ Winelist aplicación
@ Sintetizar wineId;
@ Sintetizar vino;
@ Sintetizar calificación;
@ Sintetizar foto;
/ / Con ARC, si ha seleccionado id, usted no necesita dealloc
@ End
--------------------------------------




No hay comentarios:

Publicar un comentario