【问题标题】:How to get files which are locally stored in app's document directory after ios app version get update?ios应用程序版本更新后如何获取本地存储在应用程序文档目录中的文件?
【发布时间】:2019-01-18 03:11:21
【问题描述】:
我开发了一个 iOS 应用程序,它一直在下载文件并将数据存储在 Documents 目录中。我在 sqlite 数据库中存储文档的目录路径(下载文件的存储位置)。现在,如果应用程序版本发生变化,那么数据库文件和文档目录的路径也会发生变化。如果我手动删除了该应用程序并重新安装,则下载的文件将从文档目录中删除,用户必须再次下载文件。有没有办法用以前下载的文档的目录路径获取我的数据库文件,这样就不需要再次下载文件或任何其他解决方案?
【问题讨论】:
标签:
ios
objective-c
sqlite
local-storage
nsdocumentdirectory
【解决方案1】:
了解文档目录的这个概念
如果您更新了较新版本的应用程序,文档目录中的数据不会被删除。它会在那里。只是到达文档目录的路径得到更新。
因此,要克服路径更改问题。不要将整个路径存储到数据库文件。只需将下载内容的结束路径或名称存储到文档目录即可。现在,如果您想从文档目录中获取一些文件,比如说 example.jpg,那么您应该首先获取文档目录的路径,然后附加文件的路径。
PATH_TO_DOCUMENT_DIRECTORY/example.jpg 这是图片的完整路径。这同样适用于您的 database.sqlite 文件。
你可以使用这个方便的功能:
func documentsDirPath() -> String {
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as [String]
return paths[0]
}
并且可以这样调用:
let pathToDocumentDirectory = documentsDirPath()
let fileName = "example.jpg" // This you can get from the database.
let filePath = pathToDocumentDirectory + "/\(fileName)"
print(pathToDocumentDirectory)
对于被删除的应用程序,没有选项可以恢复文档目录的内容,除非您在 applicationDidFinishLaunching 中编码并将数据保存到 iCloud 并在应用程序的新安装时检查是否有一些文件存在于 iCloud 上,名称为 database.sqlite 等,然后您可以获取它并将其放入文档目录,稍后您可以使用。
希望对你有帮助