Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTableView-由FSEvents触发时setDataSource不工作_Objective C_Cocoa_Macos_Fsevents - Fatal编程技术网

Objective c NSTableView-由FSEvents触发时setDataSource不工作

Objective c NSTableView-由FSEvents触发时setDataSource不工作,objective-c,cocoa,macos,fsevents,Objective C,Cocoa,Macos,Fsevents,下面是我得到的: 具有NSMutableArray数据源的NSTableView FSEvents监视包含包含表视图数据的文件的文件夹(用于Objective-C抽象) FSEvents触发与UI中的重载按钮相同的功能。此函数通过setDataSource:根据所述文件的内容,使用新数据源刷新表视图 下面是发生的情况: 如果对文件进行更改,将触发FSEvent并调用refresh方法 表视图应该接受的数组确实包含触发FSEvent的更改 setDataSource:使用正确的数据源发送到N

下面是我得到的:

  • 具有NSMutableArray数据源的NSTableView
  • FSEvents监视包含包含表视图数据的文件的文件夹(用于Objective-C抽象)
  • FSEvents触发与UI中的重载按钮相同的功能。此函数通过
    setDataSource:
    根据所述文件的内容,使用新数据源刷新表视图
下面是发生的情况:

  • 如果对文件进行更改,将触发FSEvent并调用refresh方法
  • 表视图应该接受的数组确实包含触发FSEvent的更改
  • setDataSource:
    使用正确的数据源发送到NSTableView
  • 更改不会显示在表视图中
但是:

  • 如果我点击刷新按钮,它会触发与FSEvent完全相同的方法,那么表视图将使用新数据更新
我还尝试用NSNotification(
nsapplicationidbecomeactivityfication
)替换FSEvent,但同样的情况也发生了

有人知道为什么会这样吗

编辑:为了澄清,我的问题的jist是:为什么我的NSTableView在被按钮按下触发时会按应有的方式重新加载,而不是在被FSEvent或NSNotification触发时重新加载


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

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

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];

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

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];

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

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


我不确定这是否是你要问的。你问题的措辞有些混乱,你陈述了一系列事件,但从来都不是一个真正的问题

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

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


我不确定这是否是你要问的。你问题的措辞有些混乱,你陈述了一系列事件,但从来都不是一个真正的问题

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

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


另一种方法是使用绑定。

您正在将
NSArray
直接设置为表视图的数据源

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


另一种方法是使用绑定。

刷新方法范围内对表视图的引用是否无效

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

刷新方法范围内对表视图的引用是否无效

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

听起来像是注册事件/通知时,您正在传递控制器类的另一个实例。

听起来像是注册事件/通知时,您正在传入控制器类的另一个实例。

我在NSArray上有一个类别,因此它符合
NSTableDataSource
协议的必要方法。我在NSArray上有一个类别,因此它符合
NSTableDataSource
协议的必要方法。这就是我要问的。不幸的是,重新加载数据会产生相同的结果。这就是我要问的。不幸的是,重新加载数据会产生相同的结果。你是对的。从事件触发时,所有UI对象都为零,但从按钮(和awakeFromNib)触发时具有正确的地址。有意思……你说得对。从事件触发时,所有UI对象都为零,但从按钮(和awakeFromNib)触发时具有正确的地址。有趣的是…这并不是问题所在,但我会把这个标记为正确的,因为它为我指明了正确的方向。谢谢这并不完全是问题所在,但我会将此标记为正确,因为它为我指明了正确的方向。谢谢