2011-01-18 22 views
5

Tengo dos entidades Libros y Paquetes. Un libro puede pertenecer a ninguno, a uno o más paquetes. Entonces tengo una relación bi-direccional a-muchos entre estas entidades.iPhone - datos básicos relación NSSet

Estoy a punto de configurar el valor de esta relación en la parte Libro.

Si el atributo era uno normal, simplemente me haría algo así

aBook.title = @"this is my title"; 

Si quería establecer el título de un libro. Pero como se trata de una relación bidireccional con muchos, los datos básicos dicen que es un atributo NSSet.

Mi pregunta es: ¿cómo puedo establecer y leer los valores de este atributo?

Primero pensé que era un NSSet normal. Así que, después de leer el producto me hizo sencilla

NSSet *aSet = Book.fromBundle; 

pero para mi consternación aAjuste contenía objetos cero

así que pensé que estaba sentado en el error. lo fijo antes de hacer

Book.fromBundle = [NSSet setWithObject:aBundle]; 

(sí, todos los cambios se guardan en la base de datos)

me estoy perdiendo algo? Gracias

Respuesta

1

Es un conjunto normal, pero los datos centrales aconsejan no asignar directamente un nuevo conjunto (por esta misma razón). Si está utilizando una clase personalizada, la implementación estándar incluiría los métodos addFromBundleObject: y removeFromBundleObject: para su uso. Si no utiliza una clase personalizada o elige no implementar estos métodos, puede usar el método mutableSetValueForKey: para obtener un conjunto que puede modificar.

NSMutableSet *mutableSet = [book mutableSetValueForKey:@"fromBundle"]; 
[mutableSet addObject:aBundle]; 
+0

gracias. La aplicación ya no se bloquea, pero después de usar este comando varias veces para agregar diferentes paquetes a un libro, el libro simplemente almacena el último. He inspeccionado la base de datos en una aplicación externa porque aún no he descubierto cómo crear un predicado en la solicitud para verificar y ver si el objeto del paquete está activado desde Bundle. En una relación demasiados, usaría [NSPredicate predicateWithFormat: @ "(fromBundle ==% @)", aBundle], pero no tengo ni idea de cómo hacer eso en un NSSet ... si puede ayudar con eso también, Agradezco (si no es para pedir demasiado) ...: D – SpaceDog

+0

Las relaciones de uno a muchos son básicamente las mismas que las relaciones de muchos a muchos. Ambos están representados como NSSets. La única diferencia es cómo se establece la relación inversa. Debería poder hacer lo mismo que haría para una relación uno a muchos. – ughoavgfhw

+0

gracias !!!!!!!!!!!! – SpaceDog

Cuestiones relacionadas