我是 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")
有可能您在访问资源之前调用了
endAccessingResources
,或者您的请求被过早释放/取消,导致系统释放文件。
不相关的附注:ODR 标签似乎不支持其中的空格。如果添加一个带有空格的标签,则该请求将在不实际下载文件的情况下执行。该行为将是
conditionallyBeginAccessingResources
不断给予 isResourceAvailable = false
。