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
Cocoa 拖放到沙盒应用程序中_Cocoa_Permissions_Appstore Sandbox - Fatal编程技术网

Cocoa 拖放到沙盒应用程序中

Cocoa 拖放到沙盒应用程序中,cocoa,permissions,appstore-sandbox,Cocoa,Permissions,Appstore Sandbox,我有一个应用程序,需要将文件保存在与源文件相同的位置,并将其拖到应用程序的窗口中。沙箱甚至在您选中“用户选择的文件”之后也不允许我使用沙箱 谢谢。你看过苹果的文档了吗,特别是 重要提示:尽管您可以支持拖动文件路径,但通常应避免这样做,除非您确定 目标应用程序永远不会在应用程序沙盒中运行。如果你使用 NSString,OSX无法知道该字符串是否应为 解释为路径;因此,OSX不会扩展目标 应用程序的沙箱,以允许访问该位置的文件或目录 地点 相反,请使用NSURL、书签或文件名粘贴板类型 你看过苹果的

我有一个应用程序,需要将文件保存在与源文件相同的位置,并将其拖到应用程序的窗口中。沙箱甚至在您选中“用户选择的文件”之后也不允许我使用沙箱


谢谢。

你看过苹果的文档了吗,特别是

重要提示:尽管您可以支持拖动文件路径,但通常应避免这样做,除非您确定 目标应用程序永远不会在应用程序沙盒中运行。如果你使用 NSString,OSX无法知道该字符串是否应为 解释为路径;因此,OSX不会扩展目标 应用程序的沙箱,以允许访问该位置的文件或目录 地点

相反,请使用NSURL、书签或文件名粘贴板类型


你看过苹果的文档了吗,尤其是

重要提示:尽管您可以支持拖动文件路径,但通常应避免这样做,除非您确定 目标应用程序永远不会在应用程序沙盒中运行。如果你使用 NSString,OSX无法知道该字符串是否应为 解释为路径;因此,OSX不会扩展目标 应用程序的沙箱,以允许访问该位置的文件或目录 地点

相反,请使用NSURL、书签或文件名粘贴板类型


将文件拖放到应用程序时,sandbox仅授予对此文件的访问权限。你甚至不能重命名它。要在同一目录中写入新文件,请使用NSOpenPanel获得对该目录的写入权限

例如:


将文件拖放到应用程序时,sandbox仅授予对此文件的访问权限。你甚至不能重命名它。要在同一目录中写入新文件,请使用NSOpenPanel获得对该目录的写入权限

例如:


谢谢你的回答,很好用。。。但是有没有办法在应用程序首选项中记录路径,而不是每次启动应用程序时都打开OpenPanel?这是一个全新的问题。请参阅此处的文档:“安全范围的书签和持久资源访问”,或在StackOverflow上搜索此文档。感谢您的回答,它非常有用。。。但是有没有办法在应用程序首选项中记录路径,而不是每次启动应用程序时都打开OpenPanel?这是一个全新的问题。请参阅此处的文档:“安全范围的书签和持久性资源访问”,或在StackOverflow上搜索。我在OSX 10.9中看到,在拖放操作完成后,沙盒只允许我对拖动的目录进行读取访问,即使我注册了
nsurlboardtype
拖动类型的视图。我在OSX 10.9中看到,在拖放操作完成后,沙箱仅允许我读取拖动目录,即使我注册了
nsurlboardtype
拖动类型的视图。
 - (void)showGrantAccessForFolderOfFile:(NSURL *)urlOfFile
 {
    NSURL *urlToGrant = [urlOfFile URLByDeletingLastPathComponent];
    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
    [openPanel setAllowsMultipleSelection:NO];
    [openPanel setCanChooseDirectories:YES];
    [openPanel setCanChooseFiles:NO];
    [openPanel setCanCreateDirectories:NO];
    [openPanel setDirectoryURL:urlToGrant];

    [openPanel setTitle:@"Grant Access To Folder"];
    [openPanel setMessage:@"Please grant access to the file’s folder"];
    [openPanel setPrompt:@"Grant Access"];

    // then run the panel as in documentation and handle errors
    // could also set a delegate and grey out other directories
    // store the sandboxed to access it later again
}