Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 OS X FinderSync';失败';用于/卷_Objective C_Operating System_Findersync - Fatal编程技术网

Objective c OS X FinderSync';失败';用于/卷

Objective c OS X FinderSync';失败';用于/卷,objective-c,operating-system,findersync,Objective C,Operating System,Findersync,我正在创建一个简单的OS X,为所有文件的控件/右键单击菜单添加一个菜单项: [FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]]; 它对所有文件都很有效(出现菜单项等),除了/Volumes中的那些文件,奇怪的是,如果我在/Volumes中手动创建目录并在那里添加一些文件,FinderSync的菜单项会在我右键单击时出现。但是,

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

[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]];
它对所有文件都很有效(出现菜单项等),除了
/Volumes
中的那些文件,奇怪的是,如果我在
/Volumes
中手动创建目录并在那里添加一些文件,FinderSync的菜单项会在我右键单击时出现。但是,对于任何已装入卷中的任何文件(即来自已装入的.dmg的文件),它将失败:不显示任何菜单项

直接在
目录URL
中指定已装入的卷同样会失败:

[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/Volumes/SomeMountedDMG"]];

它似乎有类似的问题,所以这可能是一个已知的错误/限制

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

由于预期的用例是监视由Dropbox等同步实用程序维护的特定文件夹,因此苹果可能不认为这是一个限制。但是,许多开发人员将Finder Sync扩展作为一种向Finder中的顶级上下文菜单添加任意项的方式来实现(而不必被限制在“服务”子菜单中),即使这种用法是:

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

要绕过此限制并使扩展的菜单项可用于Finder中的任何可见项,必须执行以下操作:

  • 扫描所有可见的已装入卷,并初始化
    FIFinderSyncController
    对象的
    directoryURL
    属性 结果是:

    import FinderSync
    
    let finderSync = FIFinderSyncController.default()
    if let mountedVolumes = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil,
                                                                  options: .skipHiddenVolumes) {
        finderSync.directoryURLs = Set<URL>(mountedVolumes)
    }
    
    (卸载和重命名通知的处理留作练习 供读者参考。)


  • 如果你找到了解决办法,你可以回答自己的问题。这将帮助其他人解决同样的问题。仍然没有解决方案…抱歉:(will ping Apple!它只是安装了DMG还是只读安装的卷?我刚刚测试了一个可锁定的USB驱动器,当USB驱动器处于锁定模式和解锁模式时,查找器选项有很大不同。同样的问题,你是否打开了Apple的错误?
    let notificationCenter = NSWorkspace.shared.notificationCenter
    notificationCenter.addObserver(forName: NSWorkspace.didMountNotification, object: nil, queue: .main) {
        (notification) in
        if let volumeURL = notification.userInfo?[NSWorkspace.volumeURLUserInfoKey] as? URL {
            finderSync.directoryURLs.insert(volumeURL)
        }
    }