gpt4 book ai didi

ios - 如何将已填充的 SQLite 数据库与 SharkORM 结合使用

转载 作者:行者123 更新时间:2023-11-29 06:01:47 24 4
gpt4 key购买 nike

我是一名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/

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