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

问题描述 投票:0回答:1

我是 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 下载特定资源: 有条件地开始访问资源实例方法。

我的主要代码片段是:

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 中有一个类型为 myFile 的数据。

但它返回零。

我也尝试过:

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

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

swift xcode swift3 on-demand-resources
1个回答
0
投票

有可能您在访问资源之前调用了

endAccessingResources
,或者您的请求被过早释放/取消,导致系统释放文件。

不相关的附注:ODR 标签似乎不支持其中的空格。如果添加一个带有空格的标签,则该请求将在不实际下载文件的情况下执行。该行为将是

conditionallyBeginAccessingResources
不断给予
isResourceAvailable = false

© www.soinside.com 2019 - 2024. All rights reserved.