在iOS(UIDocumentPickerViewController)上保存一个iCloud驱动器安全范围的URL

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

该文件指出:

如果URL不是无处不在的URL,则使用bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error:方法将书签保存到文件中,并传入NSURLBookmarkCreationWithSecurityScope选项。 调用此方法将创build一个包含安全范围的URL的书签,您可以使用该URL来打开该文件,而无需用户进一步干预。

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

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

进一步挖掘后,结果是选项:
NSURLBookmarkCreationWithSecurityScope
在IOS中创build书签数据时根本不需要。 这是OS X的一个选项。你可以通过零选项字段。 我认为苹果的文件是最好的混淆。
但是,您需要致电:
startAccessingSecurityScopedResource
在创build书签之前,确保在继续之前调用返回1(成功)。 否则,书签创build将失败。 这里是示例代码:
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];

再次,苹果的文件是最好的混乱! 我花了很多时间来了解这一点。 希望这可以帮助。

我今天遇到了同样的问题,事实上编译器说NSURLBookmarkCreationWithSecurityScope在iOS上不可用。

但令我惊讶的是,如果我使用原始常量( NSURLBookmarkCreationWithSecurityScope映射到( 1 << 11 ) ,该方法似乎工作。它返回一个有效的书签数据对象,当我调用[[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:stale] ,返回一个有效的安全范围NSURL ,我可以访问这些文件和目录,而且我使用iCloud Drivetesting了这些文件,文档只是说这应该适用于第三方文档提供者。

我不确定这种方法有多可靠,因为看起来苹果的工程师没有时间来完成这个function,所以在最后一分钟禁用它。 或者它可能只是头文件中的一个错误。 如果有人对此有更多的了解,请发表评论。