我当前正在保存用户从其照片库中选择的图像,并将URL保存为用户默认值。
我当前面临的问题是每当我的应用程序重新启动时,例如Xcode重新启动我保存到用户默认值的URL不再有效。从我的理解/研究中,我需要为图像保存一个相对URL。但是我做这件事没有运气。这在模拟器和实际设备中都发生。
从我的UIImagePicker
开始,这是我的步骤:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let image = info[.originalImage] as? UIImage else { return }
let savingImage : SavingImage = SavingImage()
let ourStringedUrl : String = savingImage.saveImageDocumentDirectory(image: image, imageName: image.description)
}
从SavingImage
,这里是照片本身的保存
func getDirectoryPath() -> NSURL {
let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("AllImages")
let url = NSURL(string: path)
return url!
}
func saveImageDocumentDirectory(image: UIImage, imageName: String) -> String {
let fileManager = FileManager.default
let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("AllImages")
if !fileManager.fileExists(atPath: path) {
try! fileManager.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil)
}
let url = NSURL(string: path)
let imagePath = url!.appendingPathComponent(imageName)
let urlString: String = imagePath!.absoluteString
let imageData = image.jpegData(compressionQuality: 1)
fileManager.createFile(atPath: urlString as String, contents: imageData, attributes: nil)
return urlString as String
}
&最后是我如何加载图像本身:
func getImageFromDocumentDirectory(imageName : String) -> UIImage {
let fileManager = FileManager.default
var ourImage : UIImage!
let imagePath = "\(imageName)"
let urlString: String = imagePath
if fileManager.fileExists(atPath: urlString) {
ourImage = UIImage(contentsOfFile: urlString)
} else {
if ourImage == nil {
ourImage = UIImage(named: "defaultImage.png")
}
}
return ourImage
}
我在加载方面哪里出错了?我应该如何准确保存URL?
正在保存的URL类似于以下内容:
//var/mobile/Containers/Data/Application/17C16D0D-1BFA-44F5-A6BD-18DFAEA051E0/Documents/AllImages/%3CUIImage:0x280a393b0%20anonymous%20%7B3024,%204032%7D%3E
但是在重新启动后加载映像时将显示为零。
每当您重新启动模拟器或每次将新版本安装到设备时,都会创建新目录。 (卸载以前的并安装新的)。 iOS不允许我们选择目录。在安装新应用程序时,它将创建其沙箱。请确保您在同一版本上检查目录。
[另一种选择是使用iCloud Drive并将图像上传到那里。 iCloud驱动器已链接到用户的iCloud帐户,因此应在应用程序更新时保持不变。
这是一个很好的入门指南:https://theswiftdev.com/2018/05/17/how-to-use-icloud-drive-documents/