swift - 每次重启 Swift iOS 都会更改文件目录

标签 swift storage uiimagepickercontroller nsuserdefaults swift5

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

相关文章:

ios - 如何在 Swift 中构造多个 HTTP 请求?

swift - 如何访问 ARSCNDebugOptions.showBoundingBoxes?

java - Android写入内部存储问题

c++ - 为什么应用程序如此庞大?

ios - 在所选区域中从 uiimagepickerviewcontroller 裁剪图像

SwiftUI:基于@Published 变量对列表进行排序

swift - 在 Swift 中区分 UPC-E 和 EAN-8

iPhone 存储图像的最佳方式

iOS UIImagePickerController 打开时卡住

iphone - UIImagePickerController 在拍摄和选择图像时导致内存警告