usar tutorial porque español efecto data apple iphone objective-c ios xcode core-data

iphone - tutorial - Coredata borra la confusión de reglas, xcode



nsmanagedobject swift 4 (2)

Tengo una relación de Datos centrales entre dos entidades, que es así:

Entity A Entity B aRelationship <-------------->> bRelationship

Con la regla de eliminación establecida en cascada.

Tal vez tengo esto mal, pero pensé que si la regla de eliminación para estas dos relaciones se estableció en "Cascada", ¿cuándo se hizo lo siguiente ...

[context deleteObject:EntityA];

... también eliminaría todas las Entidades B asociadas con él. Sin embargo, cuando registro todas las entidades de mi B, parecería que estoy equivocado.

¿Podría alguien por favor arrojar algo de luz sobre mi confusión?

Muchas gracias.


Depende de qué reglas de eliminación estés usando.

Esto es lo que Apple dijo en su documento:

"Cuando elimina un objeto gestionado, es importante tener en cuenta sus relaciones y, en particular, las reglas de eliminación especificadas para las relaciones. Si todas las reglas de eliminación de relaciones de un objeto gestionado son Anula, entonces para ese objeto, al menos, no hay trabajo adicional que hacer (puede que tenga que considerar otros objetos que estaban en el destino de la relación; si la relación inversa era obligatoria o tenía un límite inferior de cardinalidad, entonces el objeto u objetos de destino podrían estar en un estado no válido). Si se elimina una relación regla es Cascade, luego eliminar un objeto puede resultar en la eliminación de otros. Si una regla es Denegar, entonces antes de eliminar un objeto debe eliminar el objeto de destino u objetos de la relación, de lo contrario obtendrá un error de validación cuando guarde Si una regla de eliminación es No Acción, debe asegurarse de tomar los pasos necesarios para garantizar la integridad del gráfico del objeto. "

El enlace de "Reglas para eliminar relaciones": http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW1


Si bien no es inmediatamente evidente en el editor de modelo de datos gráficos, cada relación recíproca, es decir, cada

<-->

... es realmente dos relaciones separadas, cada una con su propia regla de eliminación. Las reglas de eliminación se activan cuando se elimina un objeto de la entidad con la regla de eliminación.

Entonces, si en el editor de modelo de datos tiene dos entidades Alpha y Beta con una relación:

Alpha.betas<-->>Beta.alpha

... entonces realmente tienes dos relaciones así:

Alpha.betas--(delete rule)-->>Beta.alpha Beta.alpha--(delete rule)-->Alpha.betas

Nunca desea configurar una regla de eliminación como esta:

Alpha.betas--(cascade)-->>Beta.alpha Beta.alpha--(cascade)-->Alpha.betas

... porque al eliminar una instancia Beta se eliminará el objeto Alpha asociado que activará la eliminación de todos los objetos Beta relacionados. Dependiendo de los detalles de su modelo de datos, una cascada recíproca puede eliminar una gran parte de sus datos por accidente.

Lo que realmente quieres es:

Alpha.betas--(cascade)-->>Beta.alpha Beta.alpha--(nullify)-->Alpha.betas

Ahora, cuando eliminas el objeto Alpha , eliminará todos los objetos Beta asociados.

Cuando una cascada está bloqueada, generalmente es un problema con una relación requerida. No puedo decir con certeza sin detalles del modelo de datos.