Как вы сортируете связанные данные в NSTableColumn, используя привязку InterfaceBuilder? - PullRequest
0 голосов
/ 15 мая 2011

Сортировка связанных данных в NSTableColumn с использованием привязки IB.

Ключи: NSTableColumn, сортировка, NSArrayController, набор содержимого

ContentSet служит источником данных для TableColumn

Это относится к SplitView с двумя столбцами NSTableViews. Имена TableViews являются BookCategory и Книги. Таблица книг имеет один столбец с book_titles. Класс 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

Чтобы сформулировать проблему, табличное представление с названиями книг загрузка не отсортирована. Сортировка происходит только после того, как ПЕРВЫЙ пользователь нажмет на заголовок столбца.

Скажем, есть три категории книг: Искусство, История, Спорт. Когда приложение загружает левую таблицу в splitview, сортируется, то есть:

Art
History
Sports

Когда пользователь выбирает ЛЮБУЮ категорию, названия для всех книг в категории отображаются в правой таблице, но не отсортированы. Если пользователь нажимает на заголовок book_title TableColumn Первоначальная сортировка производится по столбцу. после этого выбор ЛЮБОЙ категории книги вызывает сортировку из book_titles в правом tableView. То есть ТОЛЬКО первый Выбор категории приводит к несортированному списку названий книг.

Большое спасибо за чтение, Марк

1 Ответ

0 голосов
/ 24 мая 2011

Это план того, что наконец-то сработало для меня.

            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         
...