2011-09-16 16 views
0

假設我正在爲動物創建使用核心數據的參考應用程序。每Animal住在Habitat,並有一個Classification。 A Classification可能有子Classifications(使用簡單的一對多父/子關係在覈心數據中建模)。在單個NSOutlineView內可視化不同實體

我想要顯示所有三個實體 - Habitats,ClassificationsAnimals - 使用單個NSOutlineView。例如,它可能是這樣的:

 
v Animals 
    Cat 
    Parrot 
    Seagull 
    Toucan Sam 
v Habitats 
    Cereal Box 
    Coast 
    Jungle 
    Living Room 
v Classifications 
    Mammal 
    v Bird 
     Tropical Bird 
     Fictional Bird 

我可以使用NSTreeController和可可綁定形象化一個單一的實體(具有層次結構)像Classifications很容易。 (並且已經這樣做了。)但是,這需要將表格列綁定到一個單一的同類「類型」。

我想我可以創建一個包含我的NSTreeController對象的引用自定義類,然後讓表列綁定的方法在這個自定義類(執行一種不同arrangedObjects的聚集成NSSet自己)。但是,Xcode似乎不想讓我綁定它(顯示(!)並拒絕讓我在綁定檢查器中設置控制器鍵)。

如何在一個NSOutlineView中可視化多個實體?

回答

0

你有兩個選擇:

  1. 使用superentity爲HabitatsClassifications,並Animals然後鍵的NSTreeController到superentity。
  2. 編寫自定義控制器。

對於(1),樹控制器正在尋找父子關係。對於在大綱樹中顯示的所有對象,該關係的關鍵名稱必須相同。如果你使用eh鍵名稱提供超級權限,它所有的子實體都會響應樹形控制器。

但是,您真正的問題在這裏是概念性的。您正在將實體與管理對象混淆,並嘗試創建具有一層代表實體和其他代表管理對象的層次的大綱。

v EntityName="Animals" 
    anAnimalObject.name="cat" 
    anAnimalObject.name="Parrot" 
    anAnimalObject.name="Seagull" 
v EntityName="Habitats" 
    aHabitatObject.name="Cereal Box" 
    aHabitatObject.name="Coast" 
v EntityName="Classifications" 
    aClassificationObject.name="Mammal" 
    v aClassificationObject.name="Bird" 
     aClassificationObject.name.subclassifications.anotherClassificationObject.name="Tropical Bird" 

如果使用綁定,您的數據模型在某些方面看起來像UI。你的數據模型看起來不像這樣。數據模型不會遞歸地爲實體本身建模,因此您不能單獨使用數據模型來顯示實體或顯示按實體分組和排列的對象。

您將需要編寫一個自定義控制器,該控制器將有代碼檢查每個對象的實體以及對象在大綱層次結構中正確位置的位置。您需要三次單獨提取,每個實體一次。

+0

我試圖寫一個自定義控制器,正如我在我的問題中提到的,但我無法弄清楚如何將它綁定到Xcode中的表列。這基本上是我的問題:我該怎麼做? –