如何获取Apple ODR资源的url路径?

How to get the url path of Apple ODR resource?

提问人:inoxious 提问时间:9/24/2021 更新时间:6/24/2022 访问量:380

问:

我是 Xcode 和 Swift 的新手。目前正在编写处理 Apple ODR 的脚本:https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/Managing.html#//apple_ref/doc/uid/TP40015083-CH4-SW1

我使用 NSBundleResourceRequest 作为

assetsPack = NSBundleResourceRequest(tags: [tag])

然后通过给定的标签从我的 Assets.xcassets 下载特定资源:conditionallyBeginAccessingResources 实例方法。

我拥有的主要代码片段是:

var assetsPack: NSBundleResourceRequest?

 if let req = assetsPack{
    req.assetsPack()
  }
  
  assetsPack = NSBundleResourceRequest(tags: [tag])
    
   
  guard let req = assetsPack else {
    return
  }
  

  req.conditionallyBeginAccessingResources{available in
    if available{
        
        print("available")
        print(available)
      
        self.anotherFunction(tag)
    } else {
      req.beginAccessingResources{error in
        guard error == nil else{
          return
        }
        self.anotherFunction(tag)
      }
    }

我需要的是在此处返回 ODR 资源的路径或将其传递给另一个函数。我需要能够并使用此路径将我的文件复制到另一个地方,或者在使用另一个外部插件下载后访问它。

我一直在尝试一些方法,例如:

    let path = req.bundle.url(forResource: "myFile", withExtension: "data")
    print(path)

考虑到我的 Assets.xcassets 中有一个数据类型为 data 的 myFile。

但它返回 nil。

我也试过:

let stringPath = Bundle.main.path(forResource: “myFile”, ofType: “data”)

let urlPath = Bundle.main.url(forResource: “myFile”, withExtension: “data”)

swift xcode swift3 按需资源

评论


答:

0赞 yo1995 6/24/2022 #1

可能是您在访问资源之前调用了,或者您的请求过早释放/无效化,这会导致系统解除分配文件。endAccessingResources

一个无关紧要的旁注:ODR 标签似乎不支持其中的空格。如果添加带有空格的标签,则请求将在不实际下载文件的情况下执行。这种行为会不断给予.conditionallyBeginAccessingResourcesisResourceAvailable = false