我当前正在保存用户从照片库中选择的图像,并将 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
但是在重新启动时加载图像时将显示为 nil。
最佳答案
每次重新启动模拟器或每次将新版本安装到设备时都会创建新目录。 (卸载旧版本并安装新版本)。 iOS 没有给我们选择目录的权限。当您安装新应用程序时,它将创建其沙箱。请确保在同一版本上检查您的目录。
关于swift - 每次重启 Swift iOS 都会更改文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350129/