如何使用InterfaceBuilder绑定在NSTableColumn中对绑定数据进行排序?

时间:2011-05-14 21:36:59

标签: sorting set nsarraycontroller nstablecolumn

使用IB绑定在NSTableColumn中对绑定数据进行排序。

键:NSTableColumn,排序,NSArrayController,内容集

contentSet就像TableColumn的数据源

这涉及一个带有两个单列NSTableViews的SplitView TableView的名称是BookCategory和 图书。 Books Table有一个包含book_titles的列。 Class BookCategory具有一对多的关系 预订。

BookCategory表使用以下方式在加载时排序:

@implementation MyBookCategoryController

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
       NSSortDescriptor *descript = 
       [NSSortDescriptor sortDescriptorWithKey:@"name"
                    ascending:YES selector:@selector(caseInsensitiveCompare:)];

       [self setSortDescriptors:[[NSArray arrayWithObject:descript] autorelease] ];

    }
    return self;
}

This same approach fails to sort the BookTitle table at load.  !!

The BookTitle table/column loads unsorted.

For the TableColumn the Attributes Inspector has  
 Sort Key:title
 Selector: caseInsensitiveCompare:
 Order: Ascending

这似乎可以在单击时启用排序 在列标题上。

I want the data sorted when the view loads. 

The binding inspector for this book_title column has:
 Value : BookCategoryArrayController.arrangedObjects.name

The BookTitleArrayController in binding inspector shows 
 Content Set: Book Category ArrayController.selection.books

重述问题,带有书名的tableview 加载未分类。它只在用户第一次点击后排序 列标题。

假设有三种书籍类别艺术,历史,体育。 当应用加载时,splitview中的左表被排序, 那就是:

Art
History
Sports

当用户选择任何类别时,所有书籍的标题 在类别中出现在右侧tableView但未排序。 如果用户单击book_title TableColumn的Header 初始排序在列上完成。此后 任何书籍类别的选择都会导致排序显示 右侧tableView中的book_titles。也就是说,只有第一个 选择类别会导致未排序的书名列表。

非常感谢阅读,Mark

1 个答案:

答案 0 :(得分:0)

这是最终对我有用的概述。

            Sorting with CategoryArrayController (NSArrayController)

      Bindings Inspector
         Content Set  Bind to: CategoryArrayController.selection.books

         SortDescriptors Bind to: ShareUserDefaultsController
          Controller Key: values
          sortDescriptors  (note:  exclamation point)
          NSUnarchiveFromData

    Shared User Defaults Controller 
        Referencing Outlets
          userDefaultsController -- AppController (C:AppController)
        Referencing Bindings
            values.sortDescriptors -- Sort Descriptors Rx Array Controller (C:NSArrayController)
                                   -- Sort Descriptors Category Array Controller (C:NSArrayController)  

      Clicking on Category Header does no sort. Selects all in Cats, and empties Recipe Table
      Comments on the above welcome.

    TableViewCat (NSTableController)
        Attributes Inspector
          TableView
            Selection 
                Empty,Column,Type Select
          Control
             State.Enabled
        Connections Inspec
            None
        Bindings Inspec
            None

      TableColumn -Category (NSTableColumn)
        Attributes Inspec
            Sort Key : None
        Bindings Inspec
            Value -- Category Array Controller.arrangedObjects.name


    Sorting with RxArrayController (C:NSArrayController)
      Attributes Inspec
         Array Controller: 1-5 of 6
         Object Controller
           EntityName: Recipe
             Prepares Content
             Editable
      Connections Inspector
        Referencing Bindings
          arrangedObjects.name -- Value - Table Column Recipe
          selectedObjects      -- Double Click Argument - Table View Book
      Bindings Inspector
       Controller Content
         Content Set
           Category Array Controller.selection.books
       Controller Content Parameters    
         Sort Descriptors Bind to: ShareUserDefaultsController
          Controller Key: values
          sortDescriptors  (note:  exclamation point)
          NSUnarchiveFromData
        Parameters  
          Managed Object Context(App Delegate.manangedObjectContext

    TableView Book (NSTableView)
        Attributes Inspector
          TableView
            Selection Empty,Column,Type Select
          Control
            State.Enabled
        Connections Inspec
            Bindings
                DoubleClick Argument -- Book Array Controller.selectedObjects
                Double Click Target  -- App Delegate.self
        Bindings Inspec
            Double Click Argument (Book Array Controller.selectedObjects)
            Double Click Target (App Delegate.self)
                Bind To: App Delegate
                    Model Key Path: self  (Repeats ?)
                    Selector Name: newBookAction: 
                      Conditionally Sets Enabled

      TableColumn - Book (NSTableColumn)
        Attributes Inspec
            Sort Key : None
        Connections Inspec
            Bindings
                Value -- Book Array Controller.arrangedObjects.name
        Bindings Inspec
            Value -- Book Array Controller.arrangedObjects.name