具有一对多关系的核心数据自引用实体

时间:2011-11-17 04:47:22

标签: iphone ios core-data

这可能很容易,但我需要一些帮助。

我在Core Data中使用自引用实体来设置决策树。是否可以在自引用表上建立一对多的关系?或者有更好的方法来设置它吗?

当我将自引用关系设置为除了一对一关系之外的任何东西时,我遇到的问题是父节点对象被添加到引用子节点的NSSet。当我选择与“To-Many”的关系时,它似乎将其设置为多对多关系。

我已经能够通过建立一对一的关系和多对多的单独关系来解决这个问题,然后将一对一关系设置为父节点,但我无法设置反向关系。并没有设置反向关系,我收到编译器警告。

非常感谢任何想法和想法!

2 个答案:

答案 0 :(得分:2)

马特W,

首先,不要与核心数据作斗争。你会输的。

其次,请显示一些代码。我怀疑你可能没有像你想象的那样使用关系。

第三,由于我对你的问题感兴趣,我写了一个关于你的树的一个简单的例子。这是一些代码:

自我指涉课:

@interface ToMany : NSManagedObject

@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSSet *children;
@property (nonatomic, retain) ToMany *parent;
@end

使用该类而没有任何编译器错误的代码:

ToMany *parent = [NSEntityDescription insertNewObjectForEntityForName: kToManyEntity 
                                               inManagedObjectContext: self.managedObjectContext];
parent.date = NSDate.date;

ToMany *child1 = [NSEntityDescription insertNewObjectForEntityForName: kToManyEntity 
                                               inManagedObjectContext: self.managedObjectContext];
child1.date   = parent.date;
child1.parent = parent;

ToMany *child2 = [NSEntityDescription insertNewObjectForEntityForName: kToManyEntity 
                                               inManagedObjectContext: self.managedObjectContext];
child2.date   = parent.date;
child2.parent = parent;

我想我已经实现了对问题的描述。究竟你在关注什么?

安德鲁

答案 1 :(得分:0)

我认为您与父母一对一的设置很好。但是,孩子应该是一对多,对吗?从逻辑上讲,这两种关系中的每一种都是彼此的反向关系。您应该能够在Xcode的数据模型编辑器中选择它们。