#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 {