在iOS上保存iCloud Drive安全范围URL(UIDocumentPickerViewController)

时间:2014-11-19 18:25:19

标签: ios cocoa icloud

我试图保存从iCloud文档选择器返回的安全范围URL(UIDocumentPickerViewController)

文档说明:

  

如果URL不是普遍存在的URL,请使用将书签保存到文件中   该   bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:错误:   方法并传入NSURLBookmarkCreationWithSecurityScope   选项。调用此方法会创建一个包含a的书签   安全范围的URL,您可以使用它来进一步打开文件   用户干预。

但是,编译器说iOS上不支持NSURLBookmarkCreationWithSecurityScope。

任何人都知道这里发生了什么......?

2 个答案:

答案 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工程师似乎没有时间完成此功能,所以在最后一分钟禁用它。或者它可能只是头文件中的一个错误。如果有人发现了更多相关信息,请发表评论。