作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名Android开发者,开始学习iOS开发。我仍在学习中,因此请期待一些基本问题。
这是我试图实现的目标:我有一个现有的 SQLite 数据库 (kanadb.db),我想在我的 iOS 应用程序中使用它。我想使用 ORM 来处理此数据库(访问权限为只读),因此我将 .db 文件放入项目文件夹中,并在 AppDelegate.swift 中执行此操作:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
SharkORM.setDelegate(self)
SharkORM.openDatabaseNamed("kanadb")
// -- Test --
// Try to load some data from the database
let results: SRKResultSet = Info.query().fetch()
print(results)
// ----------
return true
}
但是它不起作用。我注意到它在文件系统中的某个文件夹中创建了一个新的 kanadb.db 。 Android 中也做了类似的事情,启动时我们需要查看应用程序文件夹中是否已存在数据库,如果不存在,则将数据库从 bundle 复制到应用程序文件夹中。看来我必须在这里做类似的事情,但我不知道该怎么做,因为我对 iOS 还很陌生。
任何人都可以给我一些提示/代码片段来指出我正确的方向吗?
谢谢!
最佳答案
我刚刚找到了解决方案,所以我将其发布在这里,它对某人可能有用。
因此,正如我所料,我们必须将捆绑的数据库复制到应用程序的文档文件夹中。但是,数据库文件必须在目标中可用,因此我们必须在文件列表(在 XCode 中)中选择它并检查目标成员身份。
然后,在使用之前将其复制到Document文件夹中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let DB_NAME = "kanadb"
let DB_EXTENSION = "db"
do{
let databasePath = Bundle.main.url(forResource: DB_NAME, withExtension: DB_EXTENSION)
let documentsDirectory = try FileManager.default.url(for: FileManager.SearchPathDirectory.documentDirectory, in:FileManager.SearchPathDomainMask.userDomainMask, appropriateFor:nil, create:false)
let destination = documentsDirectory.appendingPathComponent(DB_NAME + "." + DB_EXTENSION)
_ = try FileManager.default.copyItem(at: databasePath!, to:destination)
} catch {
// TODO: Catch the errors more gracefuly
print("Couldn't copy the database to the document folder")
}
// Override point for customization after application launch.
SharkORM.setDelegate(self)
SharkORM.openDatabaseNamed(DB_NAME)
// -- Test --
// Try to load some data from the database
let results: SRKResultSet = Info.query().fetch()
print(results)
// ----------
return true
}
就是这样!现在,检查数据库是否已存在于应用程序的文档文件夹中可能是一个好主意,以避免每次启动应用程序时都这样做。
关于ios - 如何将已填充的 SQLite 数据库与 SharkORM 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54596513/
我是一名优秀的程序员,十分优秀!