【问题标题】:Why can I select aliases but not symbolic links in NSOpenPanel?为什么我可以在 NSOpenPanel 中选择别名但不能选择符号链接?
【发布时间】:2010-09-10 16:42:30
【问题描述】:

我想创建一个可以选择任何类型文件的NSOpenPanel,所以我这样做了

NSOpenPanel*    panel = [NSOpenPanel openPanel];

if([panel runModalForTypes:nil] == NSOKButton) {
    // process files here
}

这让我可以选择所有文件除了符号链接。
它们根本无法选择,而且很明显 setResolvesAliases
什么都不做。

什么给了?

更新 1: 我做了更多测试,发现这种奇怪之处
存在于 Leopard (10.5.5) 但不存在于 Tiger (10.4.8) 中。

更新2:上面的代码可以选择mac别名(持久化路径
存在于资源叉中的数据),但不是符号链接(使用 ln -s 创建的文件)。

【问题讨论】:

    标签: cocoa macos


    【解决方案1】:

    我无法重现此内容。我刚试了一下,效果很好。如果symlink指向一个目录,当我选择symlink时它会显示目录内容,如果symlink指向一个文件,我也可以选择它。

    当然,如果符号链接指向一个目录,只有在允许选择目录的情况下才能选择它

    NSOpenPanel * panel = [NSOpenPanel openPanel];
    [panel setCanChooseDirectories:YES];
    if ([panel runModalForTypes:nil] == NSOKButton) {
        NSLog(@"%@", [panel filenames]);
    }
    

    【讨论】:

    • 如果我添加你的行[panel setCanChooseDirectories:YES];,那么我可以选择符号链接,但我也可以选择我不想要的目录。奇怪的是它对你有用。你不是在运行 Leopard 我接受它。
    【解决方案2】:

    您的代码示例也对我有用 - 我正在使用 10.5.5 和 XCode 3.1,如果重要的话。

    如果别名指向目录,我无法选择别名,因为它解析为它指向的目录,而不是别名本身(面板似乎默认解析别名)。不过,我可以为文件选择别名。

    【讨论】:

    • 这是我的确切设置。因此,对于我的示例,您可以选择文件的别名,然后单击“打开”按钮?
    • 是的 - 我将您在问题中包含的代码复制并粘贴到我刚刚创建的测试应用程序中。
    • 实际上,它也适用于我,但仅当文件是 mac 别名时(一种存在于资源分支中的持久路径)。我仍然无法选择符号链接(使用 ln -s 创建的文件)。
    • 当我尝试选择符号链接时,我得到的行为与您相同 - 我无法选择它。那么,这听起来像是 Leopard 中的一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2023-03-24
    相关资源
    最近更新 更多