我试图保存从iCloud文档选择器返回的安全范围URL(UIDocumentPickerViewController)
文档说明:
如果URL不是普遍存在的URL,请使用将书签保存到文件中 该 bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:错误: 方法并传入NSURLBookmarkCreationWithSecurityScope 选项。调用此方法会创建一个包含a的书签 安全范围的URL,您可以使用它来进一步打开文件 用户干预。
但是,编译器说iOS上不支持NSURLBookmarkCreationWithSecurityScope。
任何人都知道这里发生了什么......?
答案 0 :(得分:6)
进一步挖掘后,结果显示选项:
NSURLBookmarkCreationWithSecurityScope
在IOS中创建书签数据时根本不需要。它是OS X的一个选项。您可以为选项字段传递nil。我认为Apple的文档最让人困惑
但是,您需要致电:
startAccessingSecurityScopedResource
在创建书签之前,确保在继续之前调用返回1(成功)。否则,书签创建将失败。以下是示例代码:
if([url startAccessingSecurityScopedResource]==1){
NSError *error;
NSData *bookmark = [url bookmarkDataWithOptions:nil
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
if(error)
//handle error condition
else
// save your bookmark
}
[url stopAccessingSecurityScopedResource];
Apple的文档再次充满了混乱!我花了很多时间才发现这一点。希望这会有所帮助。
答案 1 :(得分:1)
我今天遇到了同样的问题,确实编译器说NSURLBookmarkCreationWithSecurityScope
在iOS上不可用。
但令我惊讶的是,如果我使用原始常量(NSURLBookmarkCreationWithSecurityScope
映射到( 1 << 11 )
,该方法似乎有效。它返回一个有效的书签数据对象,当我调用{{1返回一个有效的安全范围[[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:stale]
,我可以访问文件和目录。另外,我用iCloud Drive测试了这些。而且文档只说这适用于第三方文档提供者。
我不确定这种方法有多可靠,因为Apple工程师似乎没有时间完成此功能,所以在最后一分钟禁用它。或者它可能只是头文件中的一个错误。如果有人发现了更多相关信息,请发表评论。