核心数据反向关系未设置

p.p*_*pad 12 entity-relationship core-data inverse ios xcode4

我有两个实体,我称之为A和B.它们在两个方向都配置了To-Many关系,因此A.myBs和B.myAs都是NSSets.

这是我奇怪的问题.

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

NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"];
[myBSet addObject:theBtoAdd];
Run Code Online (Sandbox Code Playgroud)

这会将theBtoAdd添加到A实体,但不会添加反向关系.核心数据上下文保存不会导致任何错误,但我的A对象没有B逆集.如果我退出应用程序,则甚至不保存部分关系.

这是奇怪的部分...如果我只是切换我的代码并执行相反的操作(有理由为我的特定应用程序更难做到这一点) - 将A添加到B而不是像这样添加B到A:

NSMutableSet *myASet = [myB mutableSetValueForKey:@"myAs"];
[myASet addObject:theAtoAdd];
Run Code Online (Sandbox Code Playgroud)

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

其他一些事情:1)我的核心数据对象模型看起来很好,但这是我在Xcode 4下添加的第一个新实体2)我已经检查,重新检查并且盲目地查看我的自定义NSManagedObjects,但它们看起来罚款 - 声明动态,NSSet,没有冲突的setter/getters ......等等.

任何帮助或调试建议将不胜感激.谢谢!

Sim*_*onB 7

我遇到了同样的问题,这就是我看到这个问题的原因.也许我的解决方案可以帮助处于相同情况的一些人.

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

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

- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects
Run Code Online (Sandbox Code Playgroud)

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