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