Pregunta

He creado el modelo que se puede ver allí: http://i.imagehost.org/0836/2009-11-08_14_37_41. png

quiero para almacenar información acerca de las categorías de sonido y algunos sonidos de la muestra para cada categoría. Categoría tiene Nombre (NSString) y SoundsRelation (NSSet de NSData, que representa los sonidos).

Aquí está el problema: Por ejemplo, tengo alguna categoría que contiene varios sonidos asociados a ella. Supongamos número de sonidos es 3. Así que si lo hago

NSLog(@"description: \n%@", category);

veré información sobre Nombre y estos tres sonidos. Algo como esto:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>
);

A continuación, quiero aclarar esta categoría de sonidos. Quiero configurar SoundsRelation a cero.

que hago:

[category setValue:nil forKeyPath:@"SoundsRelation"];

Ahora bien, si hago

NSLog(@"description: \n%@", category);

Voy a tener algo como:

Name = "Cat1";
SoundsRelation =     (
);

Bueno, parece que no tiene Cat1 sonidos asociados a ella.

Ahora guardo mi managedObjectContext utilizando el método [managedObjectContext save:] y QUIT APP .

Cuando relaund mi aplicación y hacer

NSLog(@"description: \n%@", category);

Tendré:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>
);

Veo mis sonidos anteriores!

Ahora, si puedo reemplazar SoundsRelation con algún otro NSSet que contiene 5 otros sonidos:     [Categoría setValue: otherSetWithFiveSounds forKeyPath: @ "SoundsRelation"];

Y hacer:     NSLog (@ "Descripción: \ n% @", categoría);

veo:     Name = "Cat1";     SoundsRelation = (         0x174e90,         0x174ef0,         0x174ab0,         0x1743b0,         0x1744b0     );

Ahora si ahorro, dejar de fumar y relanzamiento, después NSLogging mi categoría que veo:

Name = "Cat1";
SoundsRelation =     (
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p9>,
    0x174ea0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p10>,
    0x174eb0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p11>,
    0x174e90 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p12>,
    0x174ef0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p13>,
    0x174ab0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p14>,
    0x1743b0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p15>,
    0x1744b0 <x-coredata://2E783972-3772-4CCA-9676-1D5F732D1FD2/Sounds/p16>
);

Veo viejos sonidos nuevos sonidos +! ¿Por qué? ¿Qué debo hacer para anular por completo las relaciones viejo para las relaciones NUEVO?

¿Fue útil?

Solución

Esta línea:

[category setValue:nil forKeyPath:@"SoundsRelation"];

No elimina los sonidos de la ManagedObjectContext. Me rompe el vínculo entre la categoría de objeto y el objeto sonidos. CoreData no le gusta eso, ya que crea objetos huérfanos en el almacén persistente. Al reiniciar, CoreData asume que un error huérfano los objetos y les reasigna a sus padres originales.

Se debe utilizar la explícita 'ManagedObjectContext deleteObject: comando `para eliminar los sonidos y que necesita para asegurarse de que tiene la norma de supresión conjunto apropiado para la relación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top