objective-c - 沙箱: How to bookmark enclosing folder of user-selected file?

标签 objective-c cocoa url sandbox bookmarks

我正在对一个应用程序进行沙箱处理(该应用程序已在非沙箱处理下成功运行了几年)。

它会批量处理 PDF 并将其导出并进行一些更改。

用户有两个选择:

-将生成的 PDF 导出到指定文件夹,或

-将 PDF 导出到与原始文件相同的文件夹中。

第一个选项没有问题:用户在 NSOpenPanel 中选择一个文件夹,我创建安全范围的书签,稍后解决它,并且文件已成功保存。

但是,当用户选择将每个文件保存导出到其封闭文件夹中时,他们不会明确选择任何文件夹。他们只选择文件。

我可以为每个文件创建安全范围的书签,但它仍然不允许我访问文件所在的文件夹。当我尝试保存文件时出现权限错误。

当我尝试为封闭文件夹创建书签时,收到一条错误消息,指出该文件无法打开:

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];

NSData *bookmarkData = [url
                       bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                       includingResourceValuesForKeys:nil
                       relativeToURL:nil
                       error:&err];

据我了解,发生这种情况是因为用户没有明确选择文件夹,因此无法创建安全范围的书签。

我做了广泛的研究并尝试了各种选择,但一无所获。

如有任何帮助,我们将不胜感激!

最佳答案

您在问题末尾所表达的理解是正确的。您需要征求用户对封闭文件夹的许可或提出其他设计。如果您要更改文件扩展名(例如,编辑器可以转换文件格式等),有一个 Apple 解决方案,但不适用于 PDF 输入、PDF 输出的情况。将书签缓存到封闭的文件夹中,随着时间的推移,您的应用程序将需要更少地询问用户(请记住,文件夹的书签授予对该点下面的整个子树的访问权限)。

关于objective-c - 沙箱: How to bookmark enclosing folder of user-selected file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737143/

相关文章:

objective-c - 为 NSTableView 中的行着色

ios - 在未通过 segue 连接的 UIViewController 和 UITableViewController 之间传递数据

ios - 点击 UITextField 时如何打开 UIDatePicker

javascript - Playframework:通过Javascript通过location.href调用 Controller 的action

ios - 选择器没有已知的实例方法 'receivedItemsJSON'

objective-c - 如何欺骗 OS X 应用程序认为鼠标是手指?

xcode - 创建新的基于文档的核心数据项目时出现问题

cocoa - NSData 适合大型 c 数组吗?

url - 创建 Tinyurl 样式哈希

url - 在 URL 中使用逗号有时会破坏 URL?