核心数据逆关系没有被设置

我有两个实体,我打电话给A和B.他们在两个方向configuration了多对多关系,所以A.myBs和B.myAs都是NSSets。

这是我奇怪的问题。

当我添加一个B到我的A实体时,我使用mutableSetValueForKey这样做:

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

这确实添加了BtoAdd到A实体,但不添加反比关系。 核心数据上下文保存不会踢任何错误,但我的A对象没有B反转集。 如果我退出应用程序,即使部分关系不保存。

这是奇怪的部分…如果我只是切换我的代码,做相反的(有理由为什么这是很难做我的特定应用程序) – 添加A到B,而不是像这样添加B到A:

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

它工作得很好。 顺便说一句,我有很多其他的一对多关系的工作。 只是这一个没有。

其他几件事:1)我的核心数据对象模型看起来不错,但这是我在Xcode 4下添加的第一个新实体2)我检查,重新检查,并盲目看着我的自定义NSManagedObjects,但他们看起来罚款dynamic,NSSet,没有冲突的制定者/获得者…等

任何帮助或debuggingbuild议将不胜感激。 谢谢!

我刚刚有同样的问题,这就是为什么我看到这个问题。 也许我的解决scheme将帮助一些人在相同的情况。

对我来说,答案是在NSManagedObject子类中,我已经超越了:

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

这可以防止将正确的通知发送到处理自动反向关系的父类(NSManagedObject)。

我发现错误,如果你重写这些方法中的任何一个

 // 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; 

这将导致NSManagedObject不能正常工作,关系将不会正确设置

Apple文档: 您不能重写这些方法。

如果您是托pipe对象的子类,那么不应该有自动生成的多对多关系方法吗? 所以你只需要打电话:

 [aObject addBObject:bObject];