[Swift] nil при загрузке файлов scn, загруженных во время выполнения

Я работаю над проектом по загрузке модели в приложение на базе ARKit путем сканирования qrCode. У меня работает qrCode и файл .scn загружен в файл .tmp. Однако, когда я попытался поймать сцену с помощью SCNScene (url :), все, что вернулось, было нулем.

Мне интересно, не потому ли, что я скопировал файл слишком рано - до того, как он завершит загрузку, поскольку приложение зависает сразу после того, как я просканировал qrCode.

Мы ценим любые предложения. : D

2017-11-18 добавлен код загрузки

Шаблон: http://www.jianshu.com/p/6ca4864b3600.

func sessionSimpleDownload( scnurl: URL){
    let url = scnurl
    let request = URLRequest(url: url)
    let session = URLSession.shared
    var ls: String!

    let downloadTask = session.downloadTask(with: request,
    completionHandler: { (location:URL?, response:URLResponse?, error:Error?)
        -> Void in

        print("location:\(String(describing: location))")
        let locationPath = location!.path

        let documents:String = NSHomeDirectory() + "/Documents/max.scn"
        ls = NSHomeDirectory() + "/Documents"
        let fileManager = FileManager.default

        if (fileManager.fileExists(atPath: documents)){
            try! fileManager.removeItem(atPath: documents)
        }
        try! fileManager.moveItem(atPath: locationPath, toPath: documents)
        print("new location:\(documents)")

    })
    downloadTask.resume()

    self.Modelscene = SCNScene(named: "max.scn", inDirectory: ls)
}

person Joseph Chen    schedule 17.11.2017    source источник


Ответы (1)


Где твой код загрузки? Вы не должны пытаться загрузить файл, пока не будет вызван обработчик завершения. В любом случае вы можете проверить размер файла с помощью FileManager.default.attributesOfItem (atPath:) и посмотреть, соответствует ли он ожидаемому.

РЕДАКТИРОВАТЬ: Ваша проблема в том, что вы вызываете self.Modelscene = SCNScene (named: "max.scn", inDirectory: ls) сразу после downloadTask.resume () < / сильный>. Это означает, что вы открываете сцену, когда загрузка только началась, а не после ее завершения. Вам нужно поместить назначение сцены в обработчик завершения, чтобы это произошло, когда загрузка будет завершена.

person Josh Homann    schedule 17.11.2017
comment
Спасибо за совет, добавлен код загрузки :) - person Joseph Chen; 18.11.2017