我有两个实体,我称之为A和B。它们在两个方向上都配置了多对多关系,所以A.myBs和B.myAs都是NSSets。
这就是我奇怪的问题。
当我将B添加到我的A实体中时,我使用mutableSetValueForKey这样做:
NSMutableSet *myBSet = [myA mutableSetValueForKey:@"myBs"];
[myBSet addObject:theBtoAdd];这会将theBtoAdd添加到A实体,但不会添加反向关系。核心数据上下文保存不会消除任何错误,但是我的A对象没有设置B逆集。如果我退出应用程序,即使是部分关系也不会保存。
奇怪的是..。如果我只是改变我的代码,做相反的事情(对于我的特定应用程序,这是有原因的)-将A添加到B,而不是像这样将B添加到A:
NSMutableSet *myASet = [myB mutableSetValueForKey:@"myAs"];
[myASet addObject:theAtoAdd];它工作得很好。顺便说一句,我还有很多其他的对多的关系。只有这一个不是。
其他几件事: 1)我的核心数据对象模型看起来很好,但这是我在Xcode4下添加的第一个新实体。2)我检查了一遍又一遍,在查看我的自定义NSManagedObjects时,它们看起来很好-声明为动态的、NSSet的、没有冲突的setter/getter……等。
如有任何帮助或调试建议,将不胜感激。谢谢!
发布于 2012-01-23 23:12:47
我只是遇到了同样的问题,这就是为什么我看到了这个问题。也许我的解决方案会帮助一些处于同样情况的人。
对我来说,答案是在NSManagedObject子类中我重写了:
- (void)willChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects
- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects这会阻止将正确的通知发送到处理自动反向关系的父类(NSManagedObject)。
发布于 2016-02-29 22:26:17
如果您要覆盖这些方法中的任何一个,我发现了错误
// 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文档:您不能重写这些方法。
发布于 2011-06-03 02:36:13
如果您正在对托管对象进行子类化,不是应该有自动生成的多对多关系方法吗?因此,您只需调用:
[aObject addBObject:bObject];https://stackoverflow.com/questions/6191160
复制相似问题