2010-02-13 11 views
1

我想要製作一個核心數據應用程序,當你在TableView中選擇一個「Player」,並且所有隊友列表出現在第二個tableView中時,這兩個球員已經玩過多少次同一個「團隊」(另一個實體)。如何以編程方式檢索Core Data應用程序的表選擇和錶行?

這讓我完全陷入困境,因爲雖然我知道如何從普通數組中填充表,但是使用ArrayControllers和Core Data確實混淆了我對這種情況的看法。

你會如何處理這個問題?

回答

2

你是一個綁定問題,而不是核心數據問題。 :-)

在處理核心數據之前,您一定要掌握Cocoa Bindings。這是在文檔中陳述的,是非常真實的。

你的問題的主題似乎與身體不同,所以我會回答兩者。

顯示隊友

核心數據不談,假設你有代表Player實例的表。球員有一個球隊。球隊有很多球員。因此,推斷Player的一個實例具有「team.players」(減去自己)作爲隊友。無論您是否使用Core Data來管理模型,整體關係都是如此。

如果您仔細閱讀並掌握Cocoa Bindings,您會發現使用基本的Master/Detail設置(爲了簡單起見,爲Detail部分提供了一個額外的數組控制器),這並不困難。您的主數組控制器代表所有Player實例,而您的詳細數組控制器代表Teammates - 或者Master的選擇的「team.players」(減去它自己)。

Teammates數組控制器將像往常一樣設置其實體和託管對象上下文(請參閱文檔)。 「contentSet」將綁定到主陣列控制器的「選擇」控制器鍵,並以「team.players」作爲模型鍵路徑。

訣竅是使用predicates過濾出主控制器的選定播放器。這可以通過陣列控制器的Filter Predicate來完成。也許一個格式爲「self!=%@」,其中「%@」代表主陣列控制器的選擇。我會把Predicates(一個複雜的話題)留給你。請記住,您可以在代碼中設置它們([myController setFilterPredicate:myPredicate])或使用綁定。核心數據的謂詞還有independent

入門選擇

由於陣列控制器負責表代表了數組的,最好要問陣列控制器什麼的選擇。一種方法是向它的-arrangedObjets提供它的-selectedIndexes處的對象。

NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]]; 

你也可以要求它的-selectedObjects。不管您是使用NSArrayController還是使用符合協議的某些自定義控制器,您都應該明確知道文檔(API參考和概念文檔)描述的這兩種方法之間存在差異,但asking the controller is the most important concept

免責聲明:在社交酒傍晚之後匆匆打字。沒有檢查錯誤。 :-)

+0

非常感謝,我意識到我在這裏問了很多,並且你給了我足夠的跟進。再次,歡呼! – DanF

+0

如果你願意進一步擴展:這些球員並不總是在同一個球隊,而且經常與對方交手。我希望每個人都有一個與「團隊」實體「匹配」的日誌。由於玩家對隊伍實際上是多對多的,這需要一些額外的邏輯。這仍然是一個謂詞的項目,還是我需要繼承管理對象?如果我繼承並創建自己的方法來返回playCount,我可以使用IB綁定來訪問它嗎? – DanF

相關問題