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上调用。
答案 0 :(得分:0)
最有可能直接在init / awakeFromNib中设置bool变量,如下所示:
_myBoolVariable = NO;
但是,要为绑定发送正确的KVO通知以注意更改,您需要做的是通过
显式使用setter方法[self setMyBoolVariable:NO];
或
self.myBoolVariable = NO;
但是,如果没有看到初始化代码,很难说清楚。如果这不是问题,您应该提供有关如何初始化变量以及如何设置绑定的更多详细信息。