0

所以这就是我所拥有的:

  • 带有 NSMutableArray 数据源的 NSTableView
  • FSEvents 监视包含包含表视图数据的文件的文件夹(使用SCEvents实现 Objective-C 抽象优势)
  • FSEvents 触发与 UI 中的重新加载按钮相同的功能。此函数根据所述文件的内容,使用新的数据源刷新表格视图setDataSource:

这就是发生的事情:

  • 如果我对文件进行更改,则会触发 FSEvent 并调用刷新方法。
  • 表视图应该接受的数组确实包含触发 FSEvent 的更改。
  • setDataSource:使用正确的数据源发送到 NSTableView。
  • 更改不会出现在表格视图中!

但是之后:

  • 如果我点击刷新按钮,它触发与 FSEvent 完全相同的方法,表格视图将使用新数据进行更新。

我还尝试用 NSNotification ( NSApplicationDidBecomeActiveNotification) 替换 FSEvent,但同样的事情发生了。

有人知道为什么会这样吗?

编辑:为了澄清起见,我的问题的要点是:为什么我的 NSTableView 会在按下按钮触发时重新加载,而不是在由 FSEvent 或 NSNotification 触发时重新加载?

编辑:感谢diciu,我发现实际上我的所有 UI 引用在事件触发时都指向 0x0,但在按钮单击触发时具有有效地址。这些对象都在 IB 中声明,因此在我的代码中没有对它们进行实例化或分配。所以我现在的问题是:我能做些什么来阻止这些指针指向 nil?

4

5 回答 5

2

当我们有新数据要添加/删除到表中时,我们会在 NSTableView 上调用reloadData 。

这可能有助于强制 NSTableView 重绘。

我不确定这是否是您的要求。你问题的措辞有点令人困惑,你陈述了一系列事件,但从来没有一个真正的问题。

于 2008-11-30T02:29:35.900 回答
1

您是否尝试过在第二次运行循环中从 FSEvent 调用您的方法?

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];
于 2008-11-30T02:29:17.380 回答
1

您要NSArray直接设置为表视图的数据源?

这不是如何NSTableView工作的。数据源必须是符合NSTableDataSource. NSArray没有。您自己编写数据源;它可能与您当前调用的对象相同setDataSource:

另一种方法是使用绑定。

于 2008-11-30T07:23:31.703 回答
1

可能是刷新方法范围内对表视图的引用无效吗?

即你确定你没有调用不会产生任何错误的 [nil reloadData] 吗?如果您在 awakeFromNib 之前或在某些其他情况下设置刷新代码,则您对表格视图的引用可能为零。

于 2008-11-30T08:56:47.380 回答
1

听起来当您注册事件/通知时,您正在传递控制器类的不同实例。

于 2008-11-30T23:43:04.970 回答