Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift ios-将MDLAsset转换为MDLMesh时无法打开OBJ文件_Swift_Scnscene - Fatal编程技术网

Swift ios-将MDLAsset转换为MDLMesh时无法打开OBJ文件

Swift ios-将MDLAsset转换为MDLMesh时无法打开OBJ文件,swift,scnscene,Swift,Scnscene,我正在使用ModelIO演示加载和纹理.OBJ文件。 当我使用本地文件时,下面的代码运行良好 guard let url = Bundle.main.url(forResource: "myVase", withExtension: "obj") else { fatalError("Failed to find model file.") } let asset = MDLAsset(url:url) guard let object = asset.object(at: 0) as

我正在使用ModelIO演示加载和纹理.OBJ文件。 当我使用本地文件时,下面的代码运行良好

guard let url = Bundle.main.url(forResource: "myVase", withExtension: "obj") else {
    fatalError("Failed to find model file.")
}

let asset = MDLAsset(url:url)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("Failed to get mesh from asset.")
}
但是,当我将代码更改为使用AmazonS3中的文件而不是本地文件时。我收到错误:“无法打开OBJ文件”&“无法从资源获取网格。” 这是我的密码:

let url = URL.init(string: "https://s3.amazonaws.com/myObject/.../object.obj")

let asset = MDLAsset(url:url!)
guard let object = asset.object(at: 0) as? MDLMesh else {
   fatalError("Failed to get mesh from asset.")
}

注意:我公开了链接并免费下载。

我修复了我的问题。我的问题是我在下载完成之前转换了文件。因此,本地路径已创建,但数据为空,因为下载过程尚未完成

为了解决这个问题,我首先使用async完成下载,然后转换它

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
   let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
   let fileURL = documentsURL.appendingPathComponent("myVase.obj")     
   return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}

Alamofire.download(urlString, to: destination).response { response in
    if response.error == nil, let filePath = response.destinationURL?.path {
       print(imagePath)
       let myUrl = "file://" + filePath

       let asset = MDLAsset(url:URL(string:myUrl)!)
       guard let object = asset.object(at: 0) as? MDLMesh else {
           fatalError("Failed to get mesh from asset.")
       }
        ...
    }
}

您需要从Amazon下载文件并将其放在本地,因为MDLAsset只从文件URL加载内容,而不是从远程URL加载内容。@deoKasuhai:我不想将所有文件都存储在本地。按照我的代码,我从remote下载了.obj,然后对其进行转换,但转换时出现了一些问题