¿Cómo save un UIImage en el directory de documentos?

Estoy intentando save la ruta del file de un video grabado y una miniatura del video en el directory de documentos. Luego, establezca esos dos valores en un object utilizando las routes de acceso del file para que pueda usar el object para completar una vista de colección. Con el código que tengo actualmente (a continuación), después de grabar un video, la ruta del video se guarda en el directory de documentos, y la ruta de video y la miniatura se configuran en mi object Post y la miniatura aparece correctamente en mi vista de colección. Todo bien hasta ahora.

Sin embargo, solo la ruta de video persiste entre los reinicios de la aplicación ya que está en el directory y la miniatura no. También me gustaría save la miniatura allí, pero no sé cómo hacerlo, ya que parece que solo puedes escribir URL en el directory.

Esta es mi primera experiencia con el uso del directory de documentos ¡así que cualquier ayuda será apreciada! ¿Cómo puedo escribir la miniatura (UIImage) en el directory de mis documentos junto con el video del que proviene?

Aquí está mi código hasta ahora:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let mediaType = info[UIImagePickerControllerMediaType] as! NSString dismiss(animated: true, completion: nil) if mediaType == kUTTypeMovie { // Componenets for a unique ID for the video var uniqueVideoID = "" var videoURL:NSURL? = NSURL() var uniqueID = "" uniqueID = NSUUID().uuidString // Get the path as URL videoURL = info[UIImagePickerControllerMediaURL] as? URL as NSURL? let myVideoVarData = try! Data(contentsOf: videoURL! as URL) // Write the video to the Document Directory at myVideoVarData (and set the video's unique ID) let docPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let documentsDirectory: AnyObject = docPaths[0] as AnyObject uniqueVideoID = uniqueID + "VIDEO.MOV" let docDataPath = documentsDirectory.appendingPathComponent(uniqueVideoID) as String try? myVideoVarData.write(to: URL(fileURLWithPath: docDataPath), options: []) print("docDataPath under picker ", docDataPath) print("Video saved to documents directory") // Create a thumbnail image from the video (first frame) let asset = AVAsset(url: URL(fileURLWithPath: docDataPath)) let assetImageGenerate = AVAssetImageGenerator(asset: asset) assetImageGenerate.appliesPrefernetworkingTrackTransform = true let time = CMTimeMake(asset.duration.value / 3, asset.duration.timescale) if let videoImage = try? assetImageGenerate.copyCGImage(at: time, actualTime: nil) { // Add thumbnail & video path to Post object let video = Post(pathToVideo: URL(fileURLWithPath: docDataPath), thumbnail: UIImage(cgImage: videoImage)) posts.append(video) print("Video saved to Post object") } } } 

Tan simple como esto:

 func saveImageToDocumentDirectory(_ chosenImage: UIImage) -> String { let directoryPath = NSHomeDirectory().appending("/Documents/") if !FileManager.default.fileExists(atPath: directoryPath) { do { try FileManager.default.createDirectory(at: NSURL.fileURL(withPath: directoryPath), withIntermediateDirectories: true, attributes: nil) } catch { print(error) } } let filename = NSDate().string(withDateFormatter: yyyytoss).appending(".jpg") let filepath = directoryPath.appending(filename) let url = NSURL.fileURL(withPath: filepath) do { try UIImageJPEGRepresentation(chosenImage, 1.0)?.write(to: url, options: .atomic) return String.init("/Documents/\(filename)") } catch { print(error) print("file cant not be save at path \(filepath), with error : \(error)"); return filepath } } 

Una sugerencia: guarde las imágenes en la biblioteca / caching si se puede download de nuevo según la línea guía de Apple.