gpt4 book ai didi

macos - 如果文件更改,如何在 Mac OS X 上对所有查看应用程序执行 "refresh"?

转载 作者:行者123 更新时间:2023-12-03 17:04:47 24 4
gpt4 key购买 nike

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

最佳答案

KVO 和绑定(bind)适用于对象,而不是文件。

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

  • FNNotify是旧文件管理器中已弃用的功能。它需要一个FSRef。还有FNNotifyByPath;你可以猜猜这需要什么。
  • -[NSWorkspace noteFileSystemChanged:]接受一个路径并同样通知任何可能正在监视该文件的人。
  • File Coordination是一个单独的系统。它可能与上述更原始的方法集成,但我不确定,也不会指望它。文件协调员负责处理通知;文件演示者(包括基于文档的应用程序中的文档)负责观看。

某些应用程序会在您不执行上述任何操作的情况下注意到更改,因为它们具有较旧的手写代码来使用 keventdispatch_source 来监视文件code>、FSEvents 或其他一些方式,但大多数应用程序不采取此类额外措施。

如果您的应用是基于文档的,则无需执行任何操作。文件机器为您处理一切。您只需像平常一样实现读取和写入方法即可。

对于非基于文档的应用程序,我会首先实现文件协调,并且仅在见证 FC 未通知我关心的应用程序后才使用 noteFileSystemChanged:

关于macos - 如果文件更改,如何在 Mac OS X 上对所有查看应用程序执行 "refresh"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com