我一直在网上搜索和 Apple 的帮助,以寻求有关这方面的某种指导,但最终还是失败了。我想知道是否有人遇到过类似的情况,或者可能对正在(或没有)发生的事情有所了解。
我正在尝试为应用程序在以后的会话中调用的文件获取应用程序范围的书签。在用户选择后,我可以确认路径本身已正确添加到沙箱中,因为我可以在会话期间打开(并重新打开)它。
但是,尝试获取安全范围的书签以稍后访问它是行不通的。
这就是我正在做的事情:
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
NSError *error = nil;
NSData *bookmarkData = [url
bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
[url release];
我已经尝试过使用url
从字符串生成的path
方法以及仅使用例如 NSSavePanel 的结果对其进行测试URL
。(由于遗留原因,该字符串path
是我希望能够使用的字符串。)
我不得不使用 for 的值bookmarkDataWithOptions
而不是常量,因为由于一些其他遗留代码的原因,我不得不使用NSURLBookmarkCreationWithSecurityScope
不可用的 10.6 SDK 进行编译。
我可以确认路径指向有问题的文件为“/Users/me/Documents/document.ext”,并且NSURL
似乎正确初始化(或至少反映了相同的路径)。
该应用程序包括权利com.apple.security.files.bookmarks.app-scope
。
无论如何,这是行不通的。该代码导致 abookmarkData
为 0x0 和 anerror
为 0x0,控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.
如果我更改relativeToURL
为isurl
而不是nil
并将权利更改为com.apple.security.files.bookmarks.document-scope
,那么它似乎可以正常工作 - 也就是说,bookmarkData
至少获得一个非零值并且不会记录任何错误。但我很确定这不是我想要的(即文档范围的书签)。
有什么明显的我做错了吗?