сохранение видео в каталог документов без сбоя приложения в swift

#swift3 #file-manager

#swift3 #файловый менеджер

Вопрос:

у меня есть приложение, которое выбирает видео из библиотеки фотографий и сохраняет его в каталоге документов когда я выбираю одно видео и сохраняю его в каталоге документов, это работает хорошо, но когда я выбираю два видео или более, я получаю сбой моего приложения пожалуйста, мне нужен правильный способ сохранить видео и изображения в каталог документов без сбоя моего приложения

следующий мой код :

 @IBAction func doneButtonPressed(_ sender: UIBarButtonItem) {
 var getNumberFull = DealWithFileSystem.fetchNumberOfFilesInFolder(folderName: folderName   ".xcvg")

            for (_,asset) in self.dictionaryOfAssets.enumerated() {


                if asset.value.mediaType == .image {

                    if  let getNumberFromThumb = DealWithFileSystem.fetchNumberOfFilesInFolder(folderName: folderName) {
                        getNumberFull! = getNumberFromThumb
                        let filePathThumb = DealWithFileSystem.fetchFolderName(folderName: folderName)?.appendingPathComponent("Image (getNumberFromThumb).png")
                        let fetchOption = PHImageRequestOptions()
                        fetchOption.isSynchronous = true
                        fetchOption.deliveryMode = .highQualityFormat
                        fetchOption.resizeMode = .exact
                        PHImageManager.default().requestImage(for: asset.value, targetSize: CGSize(width:79.0,height:79.0), contentMode: .aspectFit, options: fetchOption, resultHandler: { (img, nil) in
                            if let convert = UIImagePNGRepresentation(img!) {
                                try! convert.write(to: filePathThumb!)
                            }
                        })
                    }
                    let filePathFull = DealWithFileSystem.fetchFolderName(folderName: folderName   ".xcvg")?.appendingPathComponent("Image (getNumberFull!).png")
                    let fetchOption = PHImageRequestOptions()
                    fetchOption.isSynchronous = true
                    PHImageManager.default().requestImageData(for: asset.value, options: nil, resultHandler: { (data, fetchOption, _, _) in
                        try! data?.write(to: filePathFull!)

                    })


                }else if asset.value.mediaType == .video {
                    let filePathThumb = DealWithFileSystem.fetchFolderName(folderName: folderName)?.appendingPathComponent("Video (getNumberFull!   1).jpg")
                    let fetchOption = PHImageRequestOptions()
                    fetchOption.deliveryMode = .highQualityFormat
                    fetchOption.resizeMode = .exact
                    fetchOption.isSynchronous = true
                    PHImageManager.default().requestImage(for: asset.value, targetSize: CGSize(width:79.0,height:79.0), contentMode: .aspectFit, options: fetchOption, resultHandler: { (img, info) in
                        if let convertImage = UIImageJPEGRepresentation(img!, 1.0) {
                            try! convertImage.write(to: filePathThumb!)
                        }
                    })
                    let filePathFull = DealWithFileSystem.fetchFolderName(folderName: folderName   ".xcvg")?.appendingPathComponent("Video (getNumberFull!   1).mp4")
                    PHImageManager.default().requestAVAsset(forVideo: asset.value, options: nil, resultHandler: { (AVAsset, AVAudio, info) in
                        let getUrlAsset = AVAsset as! AVURLAsset
                        if let convertVideo = NSData(contentsOf: getUrlAsset.url) {

                            convertVideo.write(to: filePathFull!, atomically: true)
                        }
                    })

                    getNumberFull!  = 1
                }
            }

}
  

заранее спасибо

Комментарии:

1. Просто не загружайте свои данные в память. Используйте метод FileManager MoveItem вместо NSData (contentsOf

2. я не могу переместить элемент из библиотеки фотографий в файловый менеджер, мне нужно сохранить эти изображения и видео в каталог документов

3. Создайте новый URL и переместите его

4. если я использую переместить его, то я не смогу сохранить миниатюры для изображений и видео, когда мне нужно извлечь этот элемент после того, как я не смогу, я думаю, сохранить ли его в фоновом потоке, но как я могу использовать фоновый поток?

5. не связано с вашей проблемой, почему вы перечисляете и отбрасываете индекс? просто выполните обычный цикл. измените for (_,asset) in self.dictionaryOfAssets.enumerated() { на for asset in dictionaryOfAssets {