iOS On Demand资源下载得很好--但在我需要使用它们的时候,却无法在主捆绑应用中找到它们。

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

我翻阅了iOS中与On Demand资产相关的文档和SO上的所有问题,但找不到答案,所以希望你能帮忙。我有一个应用程序,能够很好地访问文件(特别是视频mp4文件,这些文件在一个名为 "GameVideos "的groupfolder中)。我用来做这件事的代码是。

guard let url = Bundle.main.url(forResource: videoName, withExtension: "mp4") else {
   print("\(videoName) not found")
   return
}

let item = AVPlayerItem(url: url)
self.player1 = AVPlayer(playerItem: item)
self.videoNode1 = SKVideoNode(avPlayer: self.player1)

现在我把视频改成了 "按需播放",我看到 "未找到 "的信息被打印出来。当它没有被列为点播资源时,我不需要引用子目录--没有它也能正常工作(尽管我试着把它加进去看看)。我也很高兴我没有拼错文件名,因为那也能正常工作。

当创建On Demand资源时--我用标签设置了这个资源,并使用下面的代码来调用资源(这段代码位于GameViewController.swift和 "viewDidLoad "重写里面--我正在构建一个SpriteKit游戏,所以只有一个视图控制器--所有其他逻辑都在SKScenes中处理)。

let tags = NSSet(array: [
            "OD2",
            "OD3",
            "OD4",
            "OD5",
            "OD6",
            "OD7",
            "OD8",
        ])

  let resourceRequest = NSBundleResourceRequest(tags: tags as! Set<String>)

  resourceRequest.conditionallyBeginAccessingResources(completionHandler: {(resourcesAvailable: Bool) in
            if !resourcesAvailable  { // if resources not available - start download
                resourceRequest.beginAccessingResources(completionHandler: {(err: Error?) in
                    if let error = err {
                        print("Error getting On Demand Resources: \(error)")
                    }
                })
            }
        })

这段代码似乎可以工作,而且我可以在Xcode的Disk monitor中看到On Demand包被成功下载。

我试过的其他事情:我仔细检查了视频的目标成员,它被正确分配。我试过用列出的文件夹的子目录调用Bundle.Main.url(这也没用)我试过重命名文件夹目录(因为它的名字里有个空格)我试过多次清理build

以上都没有用......我到底做错了什么?如果有任何猜测或提示,我将非常感激。

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

所以在经过大量的试验和错误之后--我把变量'resourceRequest'放在全局范围内,并且它工作了--XCode磁盘上的信息从 "下载 "变为 "使用中"。正如你在我的代码中看到的,我之前在GameViewController中定义了'resourceRequest'。我本来以为这对一个SpriteKit游戏来说是可行的,因为GameViewController加载后,它就会控制所有的场景(所以我认为它没有超出范围)。 希望有比我聪明的人会说为什么这能工作--但目前--我只是很高兴我可以继续启动我的应用程序(苹果关于这些东西的文档很糟糕)。

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