2011-12-01 41 views
0

使用CoreData,我有一個實體「Bookmark」,它具有一個名爲'tags'到另一個實體「Tag」的一對多關係,以及一些通信屬性(string,date,...)。NSArrayController如何排序一對多的關係?

在NSTableView的,我們通過結合顯示書籤實體:

  • NSArrayController的是綁定到文件的Owner.managedObjectContext (標準的XCode CoreData模板時,managedObjectContext,在AppDelegate)
  • 中的列TableView綁定到它們各自的屬性。特別的,Tag列綁定到這個arrayController.arrangedObjects.tags並帶有一個NSValueTransformer的子類,這樣我們就可以顯示一個NSString的對多關係的摘要。

它的工作。現在,當我點擊列標題整個表視圖得到正確排序,除了「標籤」欄在那裏我得到這個:

-[_NSFaultingMutableSet compare:]: unrecognized selector sent to instance 

可以肯定的「設置」,從這個一對多的關係不迴應選擇器'比較:'。

問題: 我怎樣才能使這項工作?我如何分類一對多關係?

ValueTransformer是否可用?如果我可以提供一個自定義類來進行比較:ArrayController知道...

+0

在iOS 5和Mac OS X 10.7中,我們訂購了多對多關係。它使用NSOrderedSet而不是使用NSSet。唉它需要最新版本(我在10.6上運行)。除此之外,我在另一臺機器上嘗試過10.7,並且幾個小時後我無法使其正常工作...... – malaba

回答

0

一個可能的破解:因爲_NSFaultingMutableSet是一個NSSet,我們可以通過一個分類來添加選擇器'compare:'。

@interface NSSet (someAdditions) 
    - (NSComparisonResult)compare:(NSSet *)anotherSet; 
@end 

@implementation NSSet (someAdditions) 
    - (NSComparisonResult)compare:(NSSet *)aSet { 
     ... 
    } 
@end 

我們現在可以實現這個比較:選擇如我們所願,就像比較每一組,或以某種方式他們的NSString表示的計數。

它在我的應用程序中工作。我在NSTableColumn的綁定上重新啓用了'Creates Sort Descriptor',現在可以點擊我的tableView的標題進行排序。

這是一個黑客,因爲它影響所有的NSSet ......但至少我有我的鉤子。

您認爲如何?