所以这就是我所拥有的:
setDataSource:
基于所述文件的内容使用新数据源刷新表视图。以下是发生的事情:
setDataSource:
将使用正确的数据源发送到NSTableView。但是:
我也尝试用NSNotification(NSApplicationDidBecomeActiveNotification
)替换FSEvent,但同样的事情发生了。
任何人都知道为什么会这样?
编辑:为了澄清,我的问题的主旨是:为什么我的NSTableView在按下按钮时会重新加载,但在由FSEvent或NSNotification触发时不会重新加载?
编辑:感谢diciu,我发现实际上我的所有UI引用在事件触发时都指向0x0,但是当按钮点击触发时它会有效地址。这些对象都在IB中声明,因此在我的代码中没有实例化或分配它们。所以现在我的问题是:我能做些什么来阻止这些指针指向nil?
答案 0 :(得分:2)
当我们要向表中添加/删除新数据时,我们在NSTableView上调用 reloadData 。
这可能有助于强制NSTableView重绘。
我不确定这是不是你问的问题。你的问题的措辞有点令人困惑,你陈述了一系列事件,但绝不是一个真正的问题。
答案 1 :(得分:1)
您是否尝试在运行循环的第二次传递中从FSEvent调用您的方法?
[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];
答案 2 :(得分:1)
您是否直接将NSArray
设置为表格视图的数据源?
这不是NSTableView
的工作方式。数据源必须是符合NSTableDataSource
的对象。 NSArray
没有。您自己编写数据源;它可能与您当前调用setDataSource:
的对象相同。
另一种方法是使用Bindings。
答案 3 :(得分:1)
可能是对刷新方法范围内的表视图的引用无效吗?
即。你确定你没有调用[nil reloadData]而不会产生任何错误吗? 如果您在awakeFromNib之前或在其他情况下设置了对表视图的引用,则刷新代码中的引用可能为nil。
答案 4 :(得分:1)
听起来就像注册事件/通知一样,你传递的是控制器类的另一个实例。