沙盒:如何为用户所选文件的封闭文件夹添加书签?

时间:2013-12-23 04:50:46

标签: 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];

据我所知,这是因为用户没有明确选择文件夹,因此无法创建安全范围的书签。

我做了大量的研究并尝试了各种选择,但无法到达任何地方。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

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