2011-05-31 14 views
11

Tengo dos entidades a las que llamaré A y B. Están configuradas con relaciones de muchos en ambas direcciones, por lo que A.myBs y B.myAs son ambos NSSets.Relación inversa de datos centrales no establecida

Aquí está mi extraño problema.

Cuando agrego un B a mi Una entidad, lo hago con el mutableSetValueForKey así:

NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"]; 
[myBSet addObject:theBtoAdd]; 

Esto le añade el theBtoAdd a la entidad A, pero no agrega la relación inversa. El almacenamiento de contexto de Datos centrales no activa ningún error, pero mi objeto A no tiene el conjunto inverso B. Si salgo de la aplicación, incluso la relación parcial no se guarda.

Aquí está la parte extraña ... si simplemente cambio mi código y hago lo contrario (hay razones por las que esto es más difícil de hacer para mi aplicación particular) - agregue A a B en lugar de agregar B a A como este :

NSMutableSet *myASet = [myB mutableSetValueForKey:@"myAs"]; 
[myASet addObject:theAtoAdd]; 

Funciona bien. Por cierto, tengo muchas otras muchas relaciones que funcionan. Solo este no.

par de otras cosas: 1) Mi núcleo modelo de objetos de datos se ve bien, pero esta es la primera entidad nueva que he añadido en virtud de Xcode 4 2) He cheque, y vuelto a comprobar quedado ciego mirando mi NSManagedObjects personalizados, pero se ven bien: declarado dinámico, NSSet, sin setters/getters conflictivos ... etc.

Cualquier ayuda o sugerencia de eliminación de errores sería muy apreciada. ¡Gracias!

+0

¿Alguna vez descubrió esto? Estoy atascado con el mismo problema :( – edsko

Respuesta

6

Acabo de tener el mismo problema, por lo que vi esta pregunta. Tal vez mi solución ayudará a algunas personas en la misma situación.

Para mí la respuesta fue que en la subclase NSManagedObject que tenía sobre-accidentó:

- (void)willChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects 

- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects 

Esto evita que las notificaciones correctas de ser enviado a la clase padre (NSManagedObject) que se ocupa de las relaciones inversas automáticas.

+0

Esto también me ayudó.Recuerde hacer lo mismo también para - (void) didChangeValueForKey: (NSString *) clave; (valores simples) – Lukasz

+0

Completo un error tonto en mi base de código, pero esta respuesta señaló dónde estaría el problema, por lo que obtuviste mi voto popular. Gracias Señor. – LeffelMania

0

Si está subclasificando el Objeto Administrado, ¿no debería haber muchos métodos de relación generados automáticamente? Para que solo tenga que llamar:

[aObject addBObject:bObject]; 
+0

Sí, puedo y lo intenté con el mismo resultado. Estoy siguiendo específicamente el consejo en http://stackoverflow.com/questions/4206788/how-to-get- at-a-relationship-items-properties-in-core-data y el uso de mutableSetValueForKey. –

1

He encontrado el error, si está sustituyendo cualquiera de estos métodos

// KVO change notification 
- (void)willChangeValueForKey:(NSString *)key; 
- (void)didChangeValueForKey:(NSString *)key; 
- (void)willChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects; 
- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects; 

que hará que NSManagedObject no funcionan bien y las relaciones no se establece correctamente

documentación de Apple: No debe anular estos métodos.

Cuestiones relacionadas