我在可可中使用核心数据。由于我无法发布图片,因此我将尽力解释问题
我的对象模型是:
图书:highlightInBooks >>高光
对象由BookArrayController和HighlightArrayController管理。
BookNSTableView数据源是BookArrayController,HighlightNSTableView数据源是HighlightArrayController。
我为使用高亮属性的高亮表创建了一个NSMenu:markHighlightToTrash
附加到NSMenue项的操作:
- (IBAction)trashHighlight:(id)sender {
Highlight *highlight = [_highlightArrayController arrangedObjects][[_highlightTableView clickedRow]];
[highlight setHighlightToTrash];
]
在高亮子类中:
-(void) setHighlightToTrash{
self.markHighlightToTrash = @1;
}
因此,上面的代码所做的是,当用户在“突出显示”表中将一本书的所有突出显示都丢弃时,也会在“书本表”中同时丢弃该书。
我在侧边栏中设置了两个NSButton,即AllBooks和Trash。
- (IBAction)allBookButton:(id)sender {
NSPredicate *predicateTwo = [NSPredicate predicateWithFormat:@"SUBQUERY(highlightsInBook, $highlight, $highlight.markHighlightToTrash = NO) .@count > 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) .@count > 0"];
[_bookArrayController setFilterPredicate:predicateTwo];
}
因此,如果单击AllBooks,表格将仅显示那些未标记为垃圾桶的书。当单击“垃圾箱”按钮时,表格将显示突出显示为垃圾箱的书。
问题虽然上面的代码有效,但问题是当我在高亮表中标记Book X的所有高亮时,Book X在BookTable中仍然保持可见。
尽管当我单击“废纸rash”按钮并再次单击“ AllBook”按钮时,Book X确实隐藏了(按预期方式)。
那么,为什么Book table仅在我循环浏览这两个按钮之后才更新自身。
最佳答案
数组控制器不会(也不能)观察过滤谓词中使用的属性。如果要在更改突出显示后重新应用过滤器,可以使用[arrayController rearrangeObjects]
进行。
关于objective-c - 如果我更新其中之一,则两个由NSArrayControllers链接的NSTables不会同时更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35123845/