NSArrayController在init上忽略filterPredicate

时间:2013-01-11 10:39:27

标签: objective-c cocoa-bindings

Noob警告! 我的应用程序通过NSArrayController通过绑定在标准NSTableView中显示数据。一切都很酷。

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

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

AC在NIB文件中初始化,并且通过查看KVO反馈,很快就会创建。当AppController进入时,filterPredicate不存在,但是当我们进入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上调用。

1 个答案:

答案 0 :(得分:0)

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

_myBoolVariable = NO;

但是,要为绑定发送正确的KVO通知以注意更改,您需要做的是通过

显式使用setter方法
[self setMyBoolVariable:NO];

self.myBoolVariable = NO;

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