0

菜鸟警告!我的应用程序通过 NSArrayController 全部通过绑定在标准 NSTableView 中显示数据。都很酷。

有一个 filterPredicate,“已完成的任务”,由一个复选框切换,该复选框在后台驱动 BOOL。这在应用程序运行、过滤、过滤关闭时效果很好,但是如果我在 init 或 awakeFromNib 中将 BOOL 设置为 NO,NSArrayContoller 会忽略 filterPredicate,但稍后会起作用。

我可以使用谓词将过滤后的数组传递给 AC,但猜测绑定和直接 filterPredicate 会更好。

AC 在 NIB 文件中初始化,通过查看 KVO 反馈,很早就创建了。filterPredicate 在 AppController 初始化时不存在,但在我们到达 awakeFromNIb 时存在。

有什么我想念的想法吗?

编辑:这是复选框操作调用的方法:

- (void)displayClosedJobs {
if (self.showClosedJobs)
{
    self.showClosedPredicate=nil;
}
else
{
    NSString *predValue=@"Closed";
    self.showClosedPredicate=[NSPredicate predicateWithFormat:@"!(DisplayName contains[c] %@)",predValue];
}
[self changeTableSortOrder];}

这也在 init 和 awakeFromNib 上调用。

4

1 回答 1

0

您很可能直接在 init/awakeFromNib 中设置 bool 变量,如下所示:

_myBoolVariable = NO;

但是,要发送正确的 KVO 绑定通知以通知更改,您必须做的是显式使用 setter 方法

[self setMyBoolVariable:NO];

或通过

self.myBoolVariable = NO;

但是,如果没有看到您的初始化代码,就很难判断。如果这不是问题,您应该提供有关如何初始化变量以及如何设置绑定的更多详细信息。

于 2013-01-11T11:05:44.933 回答