2012-04-25 15 views
9

Espero encontrar una forma de comprobar si un atributo CoreData está vacío. El atributo en sí es de tipo datos binarios. Si el atributo está vacío, podría decirle a mi clase que descargue y guarde algunos datos en este atributo.Comprueba si el atributo CoreData está vacío

Según la documentación de CoreData, no debe seguir buscando para ver si existen objetos. Me pregunto si hay alguna manera de hacerlo. sin romper esta 'ley'?

Este es mi primer intento de utilizar CoreData. Luego lo agrego a mi código, que es un poco más doloroso, pero en general hasta ahora todo parece ir bien. Solo necesito descubrir una forma lógica de verificar si el atributo tiene valores. Si no es así, entonces necesito descargar y guardar los datos nuevos; si lo hace, solo uso lo que hay en el atributo.

Actualización:

acabo de encontrar este método en el marco CoreData que he estado leyendo si tratara de tomar un descanso en esto. No estoy seguro de si ayudaría ... ¿qué piensan ustedes?

willAccessValueForKey: Proporciona soporte para la clave-valor de la observación de acceso notificación.

  • (void) willAccessValueForKey: (NSString *) clave Parámetros clave El nombre de una de las propiedades del receptor. Discusión Consulte didAccessValueForKey: para obtener más detalles. Puede invocar este método con el valor clave de nil para asegurarse de que se ha producido un error, como ilustrado con el siguiente ejemplo.

[aManagedObject willAccessValueForKey: nil];

No

seguro .. realmente las cosas que yo no entiendo es proporciona soporte para la observación de clave-valor de notificación de acceso. ???

Respuesta

11

Esa notificación es para cuando se va a acceder al valor.

Si lo entiendo correctamente, no quiere ver si existe una entidad, sino un atributo dentro de la entidad. Entonces, supongo que lo tienes marcado como un atributo opcional.

Digamos que tiene un atributo de datos binarios llamado rawData. Si desea encontrar todos los objetos @ "MyEntity" en la base de datos que no tienen ningún conjunto de datos para este atributo, puede emitir esta solicitud de búsqueda.

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"rawData = nil"]; 
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:0]; 
+0

okay cool .. gracias por eso. Es solo un poco preocupante porque he leído que enviar a muchas solicitudes de recuperación es algo malo de hacer ...: P –

+3

Siempre puedes evitar que alguien cree un objeto con un atributo vacío al hacerlo no opcional. O puede crear objetos que supervisen los cambios en la base de datos y agreguen/eliminen objetos a una lista global cuando tienen el valor de atributo nulo espacial/no nulo. –

Cuestiones relacionadas