2011-01-18 75 views
5

我有两个实体书籍和捆绑。一本书可以不属于一个,也可以属于一个或多个包。所以我在这些实体之间有一个双向的一对多关系。iPhone - 核心数据NSSet中关系

我即将建立的图书部分这种关系的价值。

如果属性是一个普通一个,我只想做一些像

aBook.title = @"this is my title"; 

如果我想设置标题一本书。但是,由于这是一种双向多对一的关系,核心数据表示这是一个NSSet属性。

我的问题是:我怎么设置,并从此属性读取值?

我开始还以为是一个普通的NSSet。所以,在阅读的产品,我简单做了之后

NSSet *aSet = Book.fromBundle; 

但我沮丧ASET包含零对象

所以我想我是在错误的设置它。 我将它前面做

Book.fromBundle = [NSSet setWithObject:aBundle]; 

(是的,所有的变化保存到数据库)

我这么想吗?由于

回答

1

这是一个正常的设置,但核心数据建议不要直接分配了一套新的(因为这个原因)。如果您使用的是自定义类,则标准实现将包括addFromBundleObject:removeFromBundleObject:方法供您使用。如果您不使用自定义类,或者选择不实施这些方法,那么您可以使用mutableSetValueForKey:方法获取可修改的集。

NSMutableSet *mutableSet = [book mutableSetValueForKey:@"fromBundle"]; 
[mutableSet addObject:aBundle]; 
+0

感谢。该应用程序不再崩溃,但多次使用此命令为书中添加不同的包后,本书只存储最后一本。我在外部应用程序中检查过数据库,因为我还没有弄清楚如何在请求中创建一个谓词来检查捆绑对象是否在fromBundle上。在一个太多的关系中,我会使用[NSPredicate predicateWithFormat:@“(fromBundle ==%@)”,aBundle],但我不知道如何在NSSet上做到这一点...如果你也可以帮忙,我赞赏(如果不要问得太多):D – SpaceDog 2011-01-19 00:22:15