Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Macos 如何在Mac OS X上实现;刷新“;如果文件已更改,是否查看所有应用程序?_Macos_Cocoa - Fatal编程技术网

Macos 如何在Mac OS X上实现;刷新“;如果文件已更改,是否查看所有应用程序?

Macos 如何在Mac OS X上实现;刷新“;如果文件已更改,是否查看所有应用程序?,macos,cocoa,Macos,Cocoa,在TextMate上,我可以更改本地html文件(Mountain Lion上的web共享,使用url,例如http://macmini.local/~mike/page.html),然后在TextMate中按Cmdr,Chrome、Firefox和Safari上的网页都会自动刷新内容。我想知道如何做到这一点,这是否取决于应用程序是否正在观察该文件(或者它可以选择不观察)。我听说iOS有KVO,其功能类似于Mac OS X上的绑定,但不知道上面的行为是否是由OS X绑定完成的?。KVO和绑定工作

在TextMate上,我可以更改本地html文件(Mountain Lion上的web共享,使用url,例如
http://macmini.local/~mike/page.html
),然后在TextMate中按Cmdr,Chrome、Firefox和Safari上的网页都会自动刷新内容。我想知道如何做到这一点,这是否取决于应用程序是否正在观察该文件(或者它可以选择不观察)。我听说iOS有KVO,其功能类似于Mac OS X上的绑定,但不知道上面的行为是否是由OS X绑定完成的?。

KVO和绑定工作于对象,而不是文件

有几种方法可以通知其他应用程序文件已更改:

  • 是旧文件管理器中已弃用的函数。它需要一个
    FSRef
    。还有
    fnotifybypath
    ;你可以猜到这需要什么
  • 获取路径,并同样通知可能正在监视该文件的任何内容
  • 这是一个独立的系统。它可能与上述更原始的方法集成,但我不确定,也不会指望它。文件协调员处理通知;文件演示者(包括基于文档的应用程序中的文档)处理观看
有些应用程序会在您不执行上述任何操作的情况下注意到更改,因为它们有较旧的手写代码,可以使用
kevent
dispatch\u source
、FSEvents或其他一些方法来查看文件,但大多数应用程序不会采取此类额外措施

如果你的应用程序是基于文档的,你不需要做任何事情。文档机器为您处理一切。您只需实现正常的读写方法


对于非基于文档的应用程序,我将首先实现文件协调,并且在看到FC没有通知我关心的应用程序后,仅使用
noteFileSystemChanged:

-[NSWorkspace noteFileSystemChanged:]不推荐使用。您应该立即使用FSEvents