文件目录更改每次重启 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 GoogleAPIClientForREST – Shell 脚本调用错误 GTMSessionFetcher.framework:没有这样的文件或目录