2011-03-01 11 views
5

Parece que no puedo encontrar un ejemplo de cómo actualizar una fila existente de datos usando Core Data en iOS. En términos de SQL, estoy buscando hacer algo como: ACTUALIZAR el dispositivo SET attr1 = 'blah', attr2 = 'blah' WHERE deviceid = '1';Actualizar registro utilizando Core Data en iOS

Sé que puedo hacer algo como esto: [device setValue: @ "blah" forKey: @ "attr1"];

Sin embargo, ¿cómo puedo hacer eso solo DONDE el deviceid = '1'?

Cualquier ayuda es apreciada.

+4

Es un error fatal para pensar de datos básicos en términos de SQL. Core Data es un sistema de gestión de gráficos de objetos que a veces usa SQL para persistir en el gráfico de objetos. En Core Data, las entidades no son tablas, los atributos no son columnas, managedObjects no son filas. Ver los [consejos Tequila] (http://stackoverflow.com/questions/2350304/grouping-a-core-data-data-result/2350612#2350612) – TechZen

+1

+1 "las entidades no son tablas, los atributos no son columnas, managedObjects no son hileras "... que tiene un anillo fresco zen. – GendoIkari

+2

Esto no es útil para mí. ¿Qué tal algunos ejemplos de código o enlaces? – yupyupyup

Respuesta

1

Utilice el método lastObject por razones de seguridad. Si executeFetchRequest:error: devuelve nil, su programa se colgará:

NSManagedObject *device = [fetchedObjects lastObject]; 
13

Con Core Data, nunca ejecuta consultas SQL directamente ... actualiza la base de datos simplemente actualizando el valor de su objeto, y luego guardando managedObjectContext.

En el ejemplo, el dispositivo es una instancia específica de un objeto ... [device setValue:@"blah" forKey:@"attr1"]; que sólo se actualizará 1 objeto de dispositivo, por lo que no necesita ninguna cláusula where.

Si necesita recuperar el objeto de dispositivo correcto de la base de datos, entonces necesita usar un NSFetchRequest. Recomiendo consultar el Core Data Programming Guide para comprender cómo funciona Core Data. Si está preguntando sobre las sentencias SQL y las cláusulas WHERE, parece que tiene una visión incorrecta de qué son los Datos principales.

+0

Sí, sé que no es SQL. Pero estoy teniendo problemas para establecer valores en la entidad después de hacer una solicitud de búsqueda. Por ejemplo, uso el siguiente código para hacer una solicitud de fetchrequest: – yupyupyup

+0

// obtenga el registro del dispositivo \t NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; \t NSEntityDescription * entidad = [NSEntityDescription \t \t \t \t \t \t \t \t entityForName: @ inManagedObjectContext "dispositivo": contexto]; \t [fetchRequest setEntity: entidad]; \t \t NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "(deviceid =% d)", deviceidint]; \t [fetchRequest setPredicate: predicate]; – yupyupyup

+0

Pero me da un error cuando trato de actualizar un valor en la entidad de esta manera: – yupyupyup

Cuestiones relacionadas