微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未设置核心数据逆关系

如何解决未设置核心数据逆关系

| 我有两个实体,分别称为A和B。它们在两个方向上都配置有一对多关系,因此A.myBs和B.myAs都是NSSet。 这是我奇怪的问题。 当我将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)我的核心数据对象模型看起来不错,但这是我在Xcode 4下添加的第一个新实体 2)我已经检查,重新检查并盲目查看了我的自定义NSManagedobjects,但它们看起来不错-声明为动态,NSSet,没有冲突的setter / getters等。 任何帮助或调试建议将不胜感激。谢谢!     

解决方法

        我只是遇到了同样的问题,这就是为什么我看到这个问题。也许我的解决方案可以帮助处于相同情况的某些人。 对我来说,答案是在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文档:您不能重写这些方法。     ,        如果要对托管对象进行子类化,是否应该没有自动生成的多对多关系方法?这样您只需要调用:
[aObject addBObject:bObject];
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。