Ios 未设置核心数据反向关系

Ios 未设置核心数据反向关系,ios,core-data,xcode4,entity-relationship,inverse,Ios,Core Data,Xcode4,Entity Relationship,Inverse,我有两个实体,我称之为A和B。它们在两个方向上都配置了多个关系,所以A.myb和B.mya都是NSSET 这是我奇怪的问题 当我将a B添加到a实体时,我使用mutableSetValueForKey执行此操作,如下所示: NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"]; [myBSet addObject:theBtoAdd]; NSMutableSet *myASet = [myB mutableSetValueForK

我有两个实体,我称之为A和B。它们在两个方向上都配置了多个关系,所以A.myb和B.mya都是NSSET

这是我奇怪的问题

当我将a B添加到a实体时,我使用mutableSetValueForKey执行此操作,如下所示:

NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"];
[myBSet addObject:theBtoAdd];
NSMutableSet *myASet = [myB mutableSetValueForKey:@"myAs"];
[myASet addObject:theAtoAdd];
这会将theBtoAdd添加到A实体,但不会添加反向关系。核心数据上下文保存不会引发任何错误,但我的A对象没有B反转集。如果退出应用程序,即使部分关系也不会保存

这是奇怪的部分。。。如果我只是切换代码,然后执行相反的操作(对于我的特定应用程序,这是很难做到的原因)-将A添加到B,而不是像这样将B添加到A:

NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"];
[myBSet addObject:theBtoAdd];
NSMutableSet *myASet = [myB mutableSetValueForKey:@"myAs"];
[myASet addObject:theAtoAdd];
它很好用。顺便说一句,我有很多其他对多的关系是有效的。只是这一个没有

还有两件事: 1) 我的核心数据对象模型看起来不错,但这是我在Xcode 4下添加的第一个新实体 2) 我已经检查、重新检查并盲目查看了我的自定义NSManagedObject,但它们看起来很好-声明动态、NSSet,没有冲突的setter/getter。。。等等


如有任何帮助或调试建议,将不胜感激。谢谢大家!

如果要对托管对象进行子类化,是否应该自动生成许多关系方法?因此,您只需拨打:

[aObject addBObject:bObject];

我只是有同样的问题,这就是为什么我看到这个问题。也许我的解决方案会帮助一些处于同样情况的人

对我来说,答案是,在NSManagedObject子类中,我有超过riden的:

- (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无法正常工作,并且无法正确设置关系


苹果文档:您不能覆盖这些方法

是的,我可以,而且我确实试过,结果也一样。我特别遵循中的建议,并使用可变SetValueForkey。你有没有想过这个问题?我也遇到了同样的问题:(这对我也有帮助。记住对-(void)didChangeValueForKey:(NSString*)key;(plain values)Suuuch在我的代码库中发现了一个愚蠢的错误,但这个答案指出了问题所在,所以我向你投了赞成票。谢谢你,先生。