2011-11-17 90 views
1

这可能很容易,但我需要一点帮助。核心数据具有一对多关系的自引用实体

我在核心数据中使用自引用实体来设置决策树。是否有可能在自引用表上有一对多的关系?或者有更好的方法来设置它?

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

我已经能够通过建立一对一的关系以及多对多的单独关系来解决此问题,然后将一对一关系设置为父对象节点,但我无法设置反向关系。而不是设置反向关系,我得到一个编译器警告。

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

回答

0

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

2

Matt W,

首先,不要与Core Data争斗。你会输的。

二,请显示一些代码。我怀疑你可能不会像你认为的那样使用关系。

第三,当我对你的问题感兴趣时,我写了一个树的简单例子。下面是一些代码:

的自我指涉类:

@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; 

我想我已经实现你的问题的说明。你究竟在担心什么?

Andrew