gpt4 book ai didi

ios - 在 Swift 3 和 iOS 中管理 Sqlite 数据库文件(从本地和/或 bundle 复制到应用程序)

转载 作者:行者123 更新时间:2023-12-01 19:32:39 24 4
gpt4 key购买 nike

我正在尝试将我的 sqlite 数据库文件上传到应用程序中。我一直在学习iOS文件系统,但我不完全确定它是如何工作的并且迷失了方向。这是我想要实现的目标,但不确定如何实现:

  1. 我希望在此位置 my-xcode-project-path/data/foo.sqlite 上有数据库。现在我是第一次运行模拟器,我想将此数据库复制到模拟器的 Document 目录中。
  2. 如果我已经安装了该应用程序,我将跳过第 1 步并从 bundle 中复制数据库。
  3. 如果我尝试运行模拟器,但 bundle 中没有可用文件,我想保留该数据库。

提前谢谢您!!!

我的代码如下所示:

func prepareDatabaseFile() -> String {
let fileName: String = "foo.sqlite"

let filemanager:FileManager = FileManager.default
let directory = filemanager.urls(for: .documentDirectory, in: .userDomainMask).first!

let newUrl = directory.appendingPathComponent(fileName)
let bundleUrl = Bundle.main.resourceURL?.appendingPathComponent(fileName)

// check bundle
if filemanager.fileExists(atPath: (bundleUrl?.path)!) {
print("bundle file exists!")
return (bundleUrl?.path)! //probably I need to copy from bundle to new app and return new url
// here check if file already exists on simulator, but not in bundle
} else if filemanager.fileExists(atPath: (newUrl.path)) {
print("prebuild file exists!")
return newUrl.path //no copy is needed
// finally, if nothing I need to copy local file
} else {
//todo copy local file from the path my-xcode-project-path/data/foo.sqlite
print("todo")
}

return fileName
}

最佳答案

在@Rob的帮助下,我找到了以下满足我要求的解决方案。以前需要将 sqlite 文件添加到 xcode 项目中,并指定正确的目标。

func prepareDatabaseFile() -> String {
let fileName: String = "foo.sqlite"

let fileManager:FileManager = FileManager.default
let directory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!

let documentUrl= directory.appendingPathComponent(fileName)
let bundleUrl = Bundle.main.resourceURL?.appendingPathComponent(fileName)

// here check if file already exists on simulator
if fileManager.fileExists(atPath: (documentUrl.path)) {
print("document file exists!")
return documentUrl.path
else if fileManager.fileExists(atPath: (bundleUrl?.path)!) {
print("document file does not exist, copy from bundle!")
fileManager.copyItem(at:bundleUrl, to:documentUrl)
}

return documentUrl.path
}

关于ios - 在 Swift 3 和 iOS 中管理 Sqlite 数据库文件(从本地和/或 bundle 复制到应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com