首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS X FinderSync对/Volumes的“失败”

OS X FinderSync对/Volumes的“失败”
EN

Stack Overflow用户
提问于 2016-07-20 06:16:25
回答 1查看 1.2K关注 0票数 11

我正在创建一个简单的OS FinderSync,它为所有文件添加一个菜单项到控件/右键单击菜单:

代码语言:javascript
复制
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]];

它工作得很好(菜单项出现,等等)对于所有文件,( /Volumes中的文件除外),奇怪的是,如果我在/Volumes中手动创建一个目录并在那里添加一些文件,当我右键单击时,FinderSync的菜单项就会出现。但是,对于任何挂载卷(即从挂载的.dmg)中的任何文件,它都会失败:没有出现菜单项。

directoryURLs中直接指定挂载卷类似地失败:

代码语言:javascript
复制
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/Volumes/SomeMountedDMG"]];

其他似乎也有类似的问题,所以这可能是已知的bug/限制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-22 20:18:03

由Finder扩展名监视的文件夹的子文件夹集不跨越文件系统边界。虽然在苹果的文档中没有明确提到这一点,但它可以通过经验进行验证(并且在macOS 10.13.3中仍然是正确的)。

由于这些扩展的预期用例是监视Finder何时显示由Dropbox等同步实用程序维护的特定文件夹,因此Apple可能不会将此行为视为限制。然而,许多开发人员将Finder扩展实现为将任意项添加到Finder中的顶级上下文菜单(而不被限制显示在“服务”子菜单中),即使这种用法是苹果明显气馁

确保Finder扩展点适合您计划提供的功能。最佳搜索同步扩展支持将本地文件夹的内容与远程数据源同步的应用程序。Finder Sync并不打算作为修改Finder用户界面的通用工具。

要解决此限制,并使扩展的菜单项在查找程序中可见,必须执行以下操作:

  1. 扫描所有可见的挂载卷,并将FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys:对象的directoryURLs属性初始化为结果:导入FinderSync let finderSync = FIFinderSyncController.default()如果让mountedVolumes =FIFinderSyncController.default 0,选项:.skipHiddenVolumes) { finderSync.directoryURLs = Set(mountedVolumes) }
  2. 由于Finder扩展是长期存在的进程,请为正在挂载、卸载和重命名的卷的通知进行注册,并相应地更新directoryURLs:let notificationCenter = NSWorkspace.shared.notificationCenter notificationCenter.addObserver(forName: NSWorkspace.didMountNotification,object: nil,queue:.main) {(通知) in if let volumeURL =NSWorkspace.shared.notificationCenter as?URL { finderSync.directoryURLs.insert(volumeURL) }} (将处理卸载和重命名通知留作读者练习。)
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38473610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档