文件目录更改每次重启 Swift iOS

Posted

技术标签:

【中文标题】文件目录更改每次重启 Swift iOS【英文标题】:File Directory Changing Every Reboot Swift iOS 【发布时间】:2019-12-16 03:16:47 【问题描述】:

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

【问题讨论】:

是在模拟器上还是在实际设备上? 模拟器和真机都出现 【参考方案1】:

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

【讨论】:

那么,我该如何在本地保存图像,而不会在每次应用更新时消失? 这取决于您的捆绑包 ID。生产后,只要应用程序有更新,它就会指向同一个包。因此它不会消失。在模拟器中它会变化的设备中。 我明白了,所以如果用户更新他们的应用程序,我就不用担心了吗?如果用户更新他们的应用,照片会保留在那里吗? 请参阅下面的参考链接。 ***.com/a/56311164/9673374【参考方案2】:

另一种方法可能是使用 iCloud Drive 并在那里上传您的图像。 iCloud 驱动器与用户的 iCloud 帐户相关联,因此在应用更新时应保持不变。

这里有一个很棒的入门教程:https://theswiftdev.com/2018/05/17/how-to-use-icloud-drive-documents/

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

【讨论】:

问题是我希望用户无需访问互联网即可访问他们从照片库中选择的图像

以上是关于文件目录更改每次重启 Swift iOS的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 删除 iOS 目录中的文件

Swift 从特定文档目录位置删除所有文件

iOS开发之-- oc 和 swift混编之自建桥接文件

Swift iOS GoogleAPIClientForREST – Shell 脚本调用错误 GTMSessionFetcher.framework:没有这样的文件或目录

Web项目Bin目录下的文件改动会引发Application_End事件,IIS会回收线程

获取文档目录iOS Swift中每个项目的属性