文件目录更改了每个重新启动的Swift iOS

问题描述 投票:0回答:2

我当前正在保存用户从其照片库中选择的图像,并将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

但是在重新启动后加载映像时将显示为零。

swift storage uiimagepickercontroller nsuserdefaults swift5
2个回答
0
投票

每当您重新启动模拟器或每次将新版本安装到设备时,都会创建新目录。 (卸载以前的并安装新的)。 iOS不允许我们选择目录。在安装新应用程序时,它将创建其沙箱。请确保您在同一版本上检查目录。


0
投票

[另一种选择是使用iCloud Drive并将图像上传到那里。 iCloud驱动器已链接到用户的iCloud帐户,因此应在应用程序更新时保持不变。

这是一个很好的入门指南:https://theswiftdev.com/2018/05/17/how-to-use-icloud-drive-documents/

这里是文档的链接:https://developer.apple.com/icloud/icloud-drive/

© www.soinside.com 2019 - 2024. All rights reserved.