ios FileManager 在重建应用程序时丢失存储的数据
ios FileManager losing stored data when rebuilding app
我正在尝试将图像存储在应用程序的文档文件夹中,以便用户以后可以随时检索它们。这是我存储它们的代码:
func store(_ image: UIImage) -> String {
let imageName = "\(Date().timeIntervalSince1970)"
let imagePath = "\(documentasPath)/\(imageName).png"
let imageData = UIImagePNGRepresentation(image)
fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
return imagePath
}
这是我从存储中检索图像的代码:
func retrieveImage(from path: String) -> UIImage? {
guard fileManager.fileExists(atPath: path) else {
return nil
}
return UIImage(contentsOfFile: path)
}
它似乎工作正常,除非我从 xcode 重建应用程序。然后我所有存储的图像都消失了(尽管我存储的所有指向它们的路径仍然存在且正确)。
这是默认文件管理器的某些行为吗?有没有办法避免这种情况发生?我希望仅在手动或卸载应用程序时删除图像。
谢谢
改成这个
func store(_ image: UIImage) -> String {
let imageName = "\(Date().timeIntervalSince1970)"
let documentsUrl = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
var imagePath = documentsUrl.appendingPathComponent("\(imageName).png")
let imageData = UIImagePNGRepresentation(image)
fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
return imagePath
}
func retrieveImage(from path: String) -> UIImage? {
guard fileManager.fileExists(atPath: path) else {
return nil
}
return UIImage(contentsOfFile: path)
}
问题是您存储的是绝对路径。您不能那样做,因为您的应用程序是 沙盒 ,这意味着(部分)Documents 文件夹的 URL 可以更改。仅存储文档 名称,每次您想保存到它或从中写入时,再次计算文档文件夹的路径 并追加文档名称并将该结果用作您的路径。
我正在尝试将图像存储在应用程序的文档文件夹中,以便用户以后可以随时检索它们。这是我存储它们的代码:
func store(_ image: UIImage) -> String {
let imageName = "\(Date().timeIntervalSince1970)"
let imagePath = "\(documentasPath)/\(imageName).png"
let imageData = UIImagePNGRepresentation(image)
fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
return imagePath
}
这是我从存储中检索图像的代码:
func retrieveImage(from path: String) -> UIImage? {
guard fileManager.fileExists(atPath: path) else {
return nil
}
return UIImage(contentsOfFile: path)
}
它似乎工作正常,除非我从 xcode 重建应用程序。然后我所有存储的图像都消失了(尽管我存储的所有指向它们的路径仍然存在且正确)。
这是默认文件管理器的某些行为吗?有没有办法避免这种情况发生?我希望仅在手动或卸载应用程序时删除图像。
谢谢
改成这个
func store(_ image: UIImage) -> String {
let imageName = "\(Date().timeIntervalSince1970)"
let documentsUrl = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
var imagePath = documentsUrl.appendingPathComponent("\(imageName).png")
let imageData = UIImagePNGRepresentation(image)
fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
return imagePath
}
func retrieveImage(from path: String) -> UIImage? {
guard fileManager.fileExists(atPath: path) else {
return nil
}
return UIImage(contentsOfFile: path)
}
问题是您存储的是绝对路径。您不能那样做,因为您的应用程序是 沙盒 ,这意味着(部分)Documents 文件夹的 URL 可以更改。仅存储文档 名称,每次您想保存到它或从中写入时,再次计算文档文件夹的路径 并追加文档名称并将该结果用作您的路径。