Cómo configurar automáticamente la relación Core Data cuando se usan contextos anidados

Estoy luchando para encontrar una solución decente para un problema que surge cuando se usan los Contextos de objetos gestionados anidados en Datos centrales. Tome un modelo que tenga dos enites, Persona y Nombre, donde cada Persona tenga una relación de uno a uno con un Nombre, y la relación de persona del Nombre no es opcional. Anteriormente, en Person's.-awakeFromInsert Método, crearía automáticamente una entidad de nombre para la nueva persona:

- (void)awakeFromInsert
{
    [super awakeFromInsert];

    NSManagedObjectContext *context = [self managedObjectContext];
    self.name = [NSEntityDescription insertNewObjectForEntityForName:@"Name" inManagedObjectContext:context];
}

Esto funciona bien en un solo contexto de objeto administrado no anidado. Sin embargo, si el contexto tiene un contexto primario, cuando se guarda el contexto secundario, se crea un nuevo objeto Person en el contexto principal, y-awakeFromInsert Se llama de nuevo sobre este nuevo objeto.antes de Las propiedades y relaciones de la persona original se copian. Entonces, se crea otro objeto Nombre, luego se "desconecta" cuando se copia la relación de nombre existente. El guardado falla porque la validación de los nombres flotantes es ahora nulaperson la relacion falla Este problema se describeaquí así como en otros lugares.

Hasta ahora, no he podido encontrar una buena solución para este problema. La creación perezosa de la relación en el método getter en realidad causa el mismo problema, porque el getter es llamado por la maquinaria interna de Core Data cuando se crea la nueva Persona en el contexto principal.

Lo único que se me ocurre es renunciar a la generación automática de relaciones, y siempre crear la relación explícitamente en la clase de controlador que crea la Persona o en un método de conveniencia (por ejemplo,+[Person insertNewPersonInManagedObjectContext:]) que solo es llamado por mi código, y essiempre el método utilizado para crear un nuevo objeto Person explícitamente. Quizás esta sea la mejor solución, pero preferiría no tener que ser tan estricto con solo permitir que se use un solo método para crear objetos gestionados, cuando hay otros métodos de creación sobre los que no tengo control y cuyo uso no puedo Verifique / excluya fácilmente, existe. Por un lado, significará múltiples subclases de NSArrayController para personalizar la forma en que crean objetos gestionados.

¿Alguien más que haya encontrado este problema ha encontrado una solución elegante que permita que un NSManagedObject cree un objeto de relación automáticamente en el momento de la creación / inserción?

Respuestas a la pregunta(2)

Su respuesta a la pregunta