2011-01-18 108 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