2010-02-17 86 views
3

我試圖實現類似於iTunes瀏覽器的東西,瀏覽簡單的書籍數據庫。我有以下實體 - 作者,類型。我想顯示作者列表和流派列表,這些列表用於過濾主要書籍列表。
我試圖在兩種不同的方式這樣做 - 建模爲:可可數據層次結構和瀏覽器

Author (has many) Genres (has many) Books 

...具有相同類型的多個實例,所以每個作者都有自己對於給定的流派名稱,我有在我的表格視圖中顯示一個很好的向下鑽取層次結構(儘管複製流派有點不合邏輯)。但是,當我選擇多個作者時,我最終會顯示同一類型的模糊,因爲它們實際上是不同的對象。

所以,我試圖做它,更理智,用這些關係:

Author (has many) Books 
Book (has one) Genre 

我可以通過採取流派的獨特工會在當前選定的作者獲得流派陣列(S) book array,但現在我剩下的問題是根據選定的流派篩選顯示的書籍列表。由於流派是共享的,因此我不能只使用CurrentGenre.books,否則我會失去所選的作者篩選。我注意到了界面構建器中的「過濾器謂詞」字段,可以在對象控制器上找到,但我一直在研究如何實際使用它將所選體裁作爲過濾器應用到情節列表。 The apple documentation說:

「你可以在Interface Builder中 的Inspector面板直接 鍵入謂詞到謂語編輯文本字段 或者,您可以在 編程方式使用 setFetchPredicate :.

設置這給我的印象是我在正確的軌道上,但這是關於它的結束。我試圖鎖定在一個很好的可可風格時尚模型,以儘量減少'膠水代碼'位和變化後來走上了軌道,這看起來像是一個相當簡單的問題ld能夠在IB中以圖形方式進行排序,但到目前爲止,它已經躲過了我!

在此先感謝。

回答

2

我對你在討論中引入的「劇集」有些困惑,但我會認爲你的意思仍然是「書」。

你絕對是在正確的軌道上。你想要一個數據模型是這樣的:

作者< - >>立即
類型< - >>立即

或甚至:
作者< < - >>書(如果你支持參考書籍等)
類型< < - >>書(如果你想多流派支持)

一旦用戶選擇的作者(S)和類型(S),你會希望有一個圖書陣列控制器使用過濾器predica只顯示那些作者或流派的書籍。

UPDATE
這應該工作:

  1. 綁定書陣列控制器的過濾謂詞在您的應用程序委託一個新的謂詞屬性「bookFilterPredicate」。
  2. 爲Author和Genre陣列控制器添加插座。
  3. 觀察兩個陣列控制器的selectedObjects屬性的更改。
  4. 當任何變化,更新過濾謂詞屬性是這樣的:self.bookFilterPredicate = [NSPredicate predicateWithFormat:@"author IN %@ && genre IN %@",authorArrayController.selectedObjects,genreArrayController.selectedObjects];
+0

哎呦,我用不同的例子玩弄問題的解釋儘可能簡單,並最終被不一致。 我應該更清楚了 - 我知道我必須應用一個謂詞來過濾數組控制器,但我不確定如何在IB中建立這種關係,如果它甚至可能,或者如果我會不得不回頭寫一些膠水將它綁在一起? – Scott

+0

我*想*你必須使用代碼,因爲我沒有看到任何方式從過濾器謂詞框中的任何(並且你將從兩個)數組控制器拉入信息。 – gerry3

+0

我儘可能懷疑,但蘋果doco中的參考把我扔了!這看起來不錯,歡呼。 – Scott

相關問題