2016-02-01 4 views
1

Я использую данные Core в какао. Так как я не могу размещать фотографии, я буду стараться изо всех сил, чтобы объяснить проблему Моя объектная модель: Книга: highlightInBooks >> ВыделитьДва связанных NSTables NSArrayControllers не обновляются одновременно, если я обновляю один из них

объекты управляются BookArrayController и HighlightArrayController. Источник данных BookNSTableView является источником данных BookArrayController и HighlightNSTableView - это HighlightArrayController.

Я создал NSMenu для выделения таблицы, которые используют атрибут Highlight: markHighlightToTrash Действие прилагается к NSMenue пункту:

- (IBAction)trashHighlight:(id)sender { 
Highlight *highlight = [_highlightArrayController arrangedObjects][[_highlightTableView clickedRow]]; 
    [highlight setHighlightToTrash]; 
] 

В кульминационной подкласса:

-(void) setHighlightToTrash{ 
    self.markHighlightToTrash = @1; 
} 

Так что выше код is is, когда пользователь выгружает всю выделенную книгу из выпадающего списка таблицы в книге Book Book.

Я установил два NSButton на боковой панели, а именно AllBooks and Trash.

- (IBAction)allBookButton:(id)sender { 

    NSPredicate *predicateTwo = [NSPredicate predicateWithFormat:@"SUBQUERY(highlightsInBook, $highlight, $highlight.markHighlightToTrash = NO) [email protected] > 0"]; 
    [_bookArrayController setFilterPredicate:predicateTwo]; 

    [_highlightArrayController setFilterPredicate:[NSPredicate predicateWithFormat:@"markHighlightToTrash = NO "]]; 
} 

- (IBAction)trashButton:(id)sender { 

    [_highlightArrayController setFilterPredicate:[NSPredicate predicateWithFormat:@"markHighlightToTrash = YES"]]; 

    NSPredicate *predicateTwo = [NSPredicate predicateWithFormat:@"SUBQUERY(highlightsInBook, $highlight, $highlight.markHighlightToTrash = YES) [email protected] > 0"]; 
    [_bookArrayController setFilterPredicate:predicateTwo]; 
} 

Поэтому, если щелкнуть AllBooks, в таблицах будут отображаться только те книги, которые не помечены в корзину. И когда нажата кнопка «Корзина», в таблицах будут показаны книги, чей ярлык отмечен как мусор.

Проблема Несмотря на то, что над кодом работает, когда я отмечаю все выделение книги X в выделенной таблице, книга X по-прежнему остается видимой в BookTable. Хотя, когда я нажимаю кнопку «Корзина» и «Агин», нажимаем кнопку «Все книги», книга «Х», скрывают (как и предполагалось).

Итак, почему таблица книг обновляется только после того, как я перехожу через эти две кнопки.

ответ

1

Контроллеры массива не (и не могут) наблюдать за свойствами, используемыми в предикате фильтра. Если вы хотите повторно применить фильтр после изменения выделения, вы можете сделать это с помощью [arrayController rearrangeObjects].

Смежные вопросы