ios - withSecurityScope 在 NSURL.BookmarkCreationOptions 中不可用

标签 ios swift xcode

我正在尝试将 url 另存为书签以持续访问 iphone 上的文件。 为此,我调用了 bookmarkData 函数。 但是为了防止我遇到的错误,例如:

Error Domain=NSCocoaErrorDomain Code=260 “文件不存在,无法打开。”

我试图在调用函数时添加 withSecurityScope 选项。 尽管我在 Apple 文档中找到了多个对此选项的引用,但在使用 NSURL.BookmarkCreationOptions.withSecurityScope 时我似乎无法找到它。它只说 'withSecurityScope' 不可用。我也查看了类定义,但仍然没有运气。

我希望有人能帮我解决这个问题。 非常感谢!

最佳答案

有两个阶段。

  1. 您必须在获得许可后从 url 创建书签数据(例如在 NSOpenPanel 中)并保存

    let data = try url.bookmarkData(options: [.withSecurityScope])
    UserDefaults.standard.set(data, forKey: "mySecureURL")
    
  2. 要使用它,请从 UserDefaults 获取数据并解析它

    guard let data = UserDefaults.standard.data(forKey: "mySecureURL") else { // do some error handling }
    var isStale = false
    let url = try URL(resolvingBookmarkData: data, options:[.withSecurityScope], bookmarkDataIsStale: &isStale) 
    if isStale { // create new bookmark data from the current url and save it again described in 1. }
    

    现在你可以使用 url 但你必须把它包在这两行中

    url.startAccessingSecurityScopedResource()
    // do something with `url`
    url.stopAccessingSecurityScopedResource()
    

关于ios - withSecurityScope 在 NSURL.BookmarkCreationOptions 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524827/

相关文章:

objective-c - 如何摆脱 Xcode 中的 "unused variable"警告?

ios - 使用 iCarousel 制作无限循环

ios - 在第二个 ViewController 文件中调用 @IBAction 函数时崩溃

快速组合 : merge multiple publishers and emit `true` when any of them emits `true`

ios - 快速从 TableView 中收集数据

ios - 用于嵌入式框架的 swift 中 Venmo iOS SDK 的导入语句

xcode - Xcode 内存图是否为非内存周期的强引用提供任何智能视觉指示器?

ios - 未找到构建 ios 应用程序 <React/RCTUtils.h> 时 React Native 中的词法或预处理器问题

iphone - 归档有关符号链接(symbolic link)的 iOS 项目时出错

ios - 更改 UICollectionViewCell 中的标签位置