Cómo Realizar un Insert/Update Con los Datos principales de los

Tengo los conceptos básicos de la inserción de los registros y eliminación de registros con Datos Básicos; sin embargo, se lo agradecería ayuda con una de las funciones más comunes – la insert/update.

Básicamente, yo uso NSMutableArray arrayWithContentsOfURL para obtener una matriz que contiene las filas de una mysql tabla. Lo que necesito hacer ahora es sincronizar mi CoreData de la tienda.

En otras palabras, es necesario agregar a cada fila de la matriz a mi CoreData mesa, pero si ya existe necesito actualizar el registro con los valores más recientes. También, si es que existe en los Datos Básicos y no en el archivo de la matriz, que había necesidad de eliminarlo.

Yo probablemente podría piratear esto juntos; sin embargo, me gustaría ver cómo su correcta y eficiente, hecho sin pérdidas de memoria.

  • sé que es tarde, pero si vas a eliminar los elementos de la base de datos que no existen en la matriz, ¿por qué no u sólo se eliminan todos los elementos de la base de datos e insertar todos los nuevos. insertar vs actualización que existen, es probablemente mucho más fácil.
  • buena sugerencia, pero no se que sería potencialmente mucho más lento? Especialmente en el caso de una tabla con muchas entradas y sólo una pareja que necesita ser cambiado. Haciendo que escribir mucho cuando no es necesario puede ser significativo, derecho?
  • sí, definitivamente, más eficaz si usted tiene un montón de filas. Yo no había en el momento aprendido la forma correcta de hacerlo 🙂
InformationsquelleAutor slevytam | 2010-11-04

1 Kommentar

  1. 37

    Hay dos maneras de insertar datos en los Datos de los núcleos – y lo que uno debe usar depende de usted. Sin embargo, uno de ellos depende de si se ha generado el Modelo de clases para el modelo de datos para el centro de Datos db.

    De la forma habitual es el uso de los siguientes:

    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 es suponiendo que usted ya tiene su objeto administrado contexto configurado.
    Es mucho más eficiente si usted crear e insertar los objetos en el contexto de un bucle y, a continuación, guardar después de que el bucle termina.

    El otro método no es muy diferente, pero es mucho más seguro en términos de tipo de seguridad. Si ha generado el modelo de clases (que se puede hacer desde el
    xcdatamodels), entonces usted puede simplemente crear un objeto de esa clase y definir 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 recuperar el objeto de la mesa (estoy asumiendo que usted está utilizando el segundo método aquí para inserciones, y como tales, han generado un modelo de clases) y el uso de los siguientes:

    [context deleteObject:object];

    Tenga en cuenta que usted tendrá que llamar a guardar para que tenga el efecto de bien.

    Espero que esto ayude! Buena suerte!

    EDITAR:
    Lo siento, debo de haber leído mal la pregunta!

    Para examinar un registro existente, usted querrá crear una Captura de Solicitud y, a continuación, ejecútelo en su objeto administrado contexto.
    Como mínimo, una Captura de Solicitud requiere que una entidad (por lo que sabe lo que la tabla de búsqueda).
    Para especificar los términos de búsqueda, usted tendrá que crear un predicado (de lo contrario la solicitud será simplemente todo vuelve en la tabla). También puede especificar un conjunto de ordenar los descriptores, de modo que sus resultados serán 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 recuperación solicitud, y devuelve todos los objetos de la tabla denominada «tabla» en una matriz.
    A partir de aquí, ya que todos los objetos necesarios en la matriz, usted puede inspeccionar y editar los registros. En caso de realizar cambios, recuerde guardar el contexto!
    El siguiente bucle se registra el primer valor de cada objeto, utilizando la misma tabla como los ejemplos anteriores.

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

    También puede eliminar los registros de este punto el uso de la mencionada función.

    Para obtener más información acerca de las Solicitudes de obtención, por favor indique la referencia de la clase un vistazo. Yo también recomiendo la lectura acerca de la ordenación de los descriptores y los predicados, ya que son muy importantes para buscar su base de Datos db, y ciertos usos de ellos son menos eficientes que otros, particularmente en la creación de NSPredicates).

    Buena suerte!

    • Hola Andrés, gracias por la respuesta. Yo ya entiendo cómo insertar registros en los Datos principales de uso de NSManagedObject como he mencionado en la pregunta. Estoy en busca de ayuda con el código de examinar los registros que ya existen en el Núcleo central de Datos, actualizarlos, eliminarlos, o insertar nuevos, basados en los registros en un NSMutableArray que he descargado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea