objective data ios objective-c iphone core-data

ios - objective - core data swift 4



Cómo realizar una inserción/actualización con datos básicos (1)

Tengo los conceptos básicos de insertar registros y eliminar registros con Core Data; sin embargo, agradecería ayuda con una de las funciones más comunes: la inserción / actualización .

Básicamente, utilizo NSMutableArray arrayWithContentsOfURL para obtener una matriz que contiene filas de una tabla mysql . Lo que tengo que hacer ahora es sincronizar mi tienda CoreData .

En otras palabras, necesito agregar cada fila en la matriz a mi tabla CoreData , pero si ya existe necesito actualizar el registro con los últimos valores. Además, si existe en Core Data y no en la matriz descargada, necesitaría eliminarla.

Probablemente podría hackear esto juntos; sin embargo, me gustaría ver cómo se hace de forma adecuada y eficiente sin pérdidas de memoria.


Hay dos formas de insertar datos en los datos principales, y cualquiera que use depende de usted. Sin embargo, uno de ellos depende de si ha generado clases de modelo para su modelo de datos para el db de datos centrales.

La forma regular es usar lo siguiente:

NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"table" inManagedObjectContext:context]; [object setValue:@"value1" forKey:@"stringColumn"]; [object setValue:12 forKey:@"numberValue"]; NSError *error; if (![context save:&error]) { NSLog(@"Failed to save - error: %@", [error localizedDescription]); }

Esto supone que ya ha configurado su contexto de objeto administrado. Es mucho más eficiente si crea e inserta sus objetos en el contexto en un bucle, y luego lo guarda después de que termine el ciclo.

El otro método no es muy diferente, pero es mucho más seguro en términos de seguridad de tipo. Si ha generado clases de modelo (que puede hacer desde los modelos xcdata), puede simplemente crear un objeto de esa clase y establecer sus propiedades.

TableObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"table" inManagedObjectContext:context]; [object setStringColumn:@"value1"]; [object setNumberValue:12]; NSError *error; if (![context save:&error]) { NSLog(@"Failed to save - error: %@", [error localizedDescription]); }

Para eliminar de una tabla, simplemente recupere el objeto de la tabla (supongo que está utilizando el segundo método aquí para las inserciones y, como tal, ha generado clases de modelo) y use lo siguiente:

[context deleteObject:object];

Tenga en cuenta que deberá llamar a guardar para que también tenga efecto.

¡Espero que esto ayude! ¡Buena suerte!

EDIT: ¡Lo siento, debo haber leído mal la pregunta!

Para examinar un registro existente, querrá crear una solicitud de obtención y luego ejecutarla en el contexto de su objeto gestionado. Como mínimo, una solicitud de obtención requiere una entidad (para que sepa en qué tabla buscar). Para especificar los términos de búsqueda, deberá crear un predicado (de lo contrario, la solicitud simplemente devolverá todo en la tabla). También puede especificar un conjunto de descriptores de clasificación para que sus resultados sean ordenados.

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"table" inManagedObjectContext:context]; [request setEntity:entity]; NSError *errorFetch = nil; NSArray *array = [context executeFetchRequest:request error:&errorFetch];

Este código crea una solicitud de recuperación y devuelve todos los objetos de la tabla denominada "tabla" en una matriz. Desde aquí, dado que todos los objetos necesarios se encuentran en la matriz, puede inspeccionar y editar los registros. Si realiza algún cambio, recuerde guardar el contexto! El siguiente ciclo registra el primer valor en cada objeto, utilizando la misma tabla que los ejemplos anteriores.

for(TableObject *object in array) { NSLog(@"object value1 = %@", object.value1); }

También puede eliminar registros de este punto utilizando la función mencionada anteriormente.

Para obtener más información acerca de las Solicitudes de obtención, por favor, eche un vistazo a la referencia de clase . También recomendaría leer acerca de los descriptores y predicados, ya que son muy importantes para buscar datos básicos y algunos usos son menos eficientes que otros (especialmente en la creación de NSPredicates).

¡Buena suerte!