gpt4 book ai didi

objective-c - 如果我更新其中之一,则 NSArrayControllers 链接的两个 NSTable 不会同时更新

转载 作者:行者123 更新时间:2023-12-03 17:10:15 24 4
gpt4 key购买 nike

我正在 cocoa 中使用核心数据。由于无法发图片,我会尽力解释问题我的对象模型是:书籍:highlightInBooks >> 突出显示

对象由BookArrayController 和HighlightArrayController 管理。BookNSTableView 数据源是BookArrayController,HighlightNSTableView 数据源是HighlightArrayController。

我已经为使用 Highlight 属性:markHighlightToTrash 的突出显示表创建了一个 NSMenu附加到 NSMenu 项的操作:

- (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];
}

因此,如果单击“所有图书”,表格将仅显示那些未标记为垃圾的图书。当单击“垃圾箱”按钮时,表格将显示其突出显示标记为垃圾箱的书籍。

问题 虽然上面的代码有效,但问题是当我在突出显示表中标记 Book X 的所有突出显示时,Book X 在 BookTable 中仍然可见。虽然当我单击“垃圾箱”按钮并再次单击“返回 AllBook”按钮时,Book X 确实会隐藏(按预期)。

那么为什么 Book 表只在我循环浏览这两个按钮后才更新自己。

最佳答案

数组 Controller 不(也不能)观察过滤谓词中使用的属性。如果您想在更改突出显示后重新应用过滤器,可以使用[arrayControllerrearrangeObjects]来实现。

关于objective-c - 如果我更新其中之一,则 NSArrayControllers 链接的两个 NSTable 不会同时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com