提问人:inoxious 提问时间:9/24/2021 更新时间:6/24/2022 访问量:380
如何获取Apple ODR资源的url路径?
How to get the url path of Apple ODR resource?
问:
我是 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”)
答:
可能是您在访问资源之前调用了,或者您的请求过早释放/无效化,这会导致系统解除分配文件。endAccessingResources
一个无关紧要的旁注:ODR 标签似乎不支持其中的空格。如果添加带有空格的标签,则请求将在不实际下载文件的情况下执行。这种行为会不断给予.conditionallyBeginAccessingResources
isResourceAvailable = false
评论