问题标签 [grdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2338 浏览

sqlite - 如何在 SwiftUI 应用程序中使用 GRDB 读取数据?

我正在尝试在此处遵循本指南:https ://elliotekj.com/2019/12/11/sqlite-ios-getting-started-with-grdb虽然有帮助,但它并不完全是一个教程。

到目前为止,我有这个代码:

应用数据库

在我的AppDelegate中,这段代码:

它认为以上是正确的。目前,我正在通过 Navicat 操作我的数据库,所以我知道我的表很好。但是现在我需要做什么才能简单地阅读我的表格?

这是我的 SwiftUI ContentView

我真的不明白在 readPerson() 中写什么或将它放在我的视图中的什么位置。现在,我很乐意从表中填充我的文本字段,但当然,我想使用按钮添加人员。

0 投票
1 回答
1593 浏览

swift - 如何从两个发布者 A 和 B 创建一个 Swift Combine 发布者,其中发布者 B 使用来自发布者 A 的值?

我想创建一个 Swift Combine 发布者,它可以实现以下目标:

  • 发布者应该由默认值(一个Swift 包)的更改或GRDB sqlite 数据库值的更改(使用GRDBCombine)触发。UserDefaults
  • 从DefaultsUserDefaults发布者收到的更新应该GRDBCombine发布者的数据库查询中使用。

这是我迄今为止尝试过的简化版本:

但是,这个发布者会产生以下错误(根据上面我的发布者的简化版本进行编辑):

Cannot convert return expression of type 'AnyPublisher<Publishers.FlatMap<_, AnyPublisher<Defaults.KeyChange<Int>, Never>>.Output, Publishers.FlatMap<_, AnyPublisher<Defaults.KeyChange<Int>, Never>>.Failure>' (aka 'AnyPublisher<_.Output, Never>') to return type 'AnyPublisher<[Task], Never>'

我敢打赌,两个发布者的值不同是有问题的:[Task]Defaults.KeyChange<Int>. 但是,我找不到解决此问题的方法。

0 投票
1 回答
2921 浏览

swift - 在范围内找不到“CodingKeys”,错误不一致

我正在研究 GRDB 数据模型。我的问题可能源于使用测试版:版本 12.0 beta 2 (12A6163b)。

我在几个结构中出现了间歇性错误。Cannot find 'CodingKeys'显示在几个结构定义中的几行。这发生在CodingKeys指示行之前或之后的几行被接受之后。请参阅下面的示例代码。

我正在使用基于GRDB 文档的枚举。

我的数据模型有 13 个表和结构定义。Columns此错误在枚举中的一两行上显示了六个结构定义。我找不到错误出现在哪一行的任何共同点。

下面示例中的错误,uuidCommodity 是一个 UUID 类型变量,但我也看到了 Date、String 和 Int 类型的行上的错误。

还有其他人看到这个问题吗?有人有什么建议吗?我昨晚向 Apple 反馈提交了这个,那里还没有答案,但现在是周末。

编辑:添加显式 CodingKeys 枚举使错误消失,但我仍然不知道为什么会出现初始错误。

0 投票
2 回答
1088 浏览

xcode - Xcode 12 更新中断 Pod 和产品

我刚刚将 Xcode 更新到版本 12。当我打开一个以前工作的项目时,我现在得到一个错误No such module 'GRDB'。我尝试过解构并重新安装 Pod,清理构建文件夹,然后重新启动 Xcode。此外,当我查看我的 Pod 下方时,产品和框架是红色的(查看图片)。在此处输入图像描述

0 投票
1 回答
268 浏览

ios - 将应用程序从 SQLite.swift 转换为 GRDB.swift

我正在尝试将我的几个应用程序转换为使用 GRDB.swift。有人有或知道我在哪里可以找到一个文件让我开始吗?我已经阅读了大多数 GRDB 文档,但我没有得到它。下面是一个示例场景。

这我能够从 SQLite.sift 转换

有人可以将其转换为 GRDB 以帮助我入门吗?

0 投票
1 回答
139 浏览

swift - 将应用程序从 SQLite.swift 转换为 GRDB.swift 第二个问题

我正在继续将我的一些应用程序从 SQLite.sift 转换为 GRDB.swift。我将我的结构转换为添加 Codable、FetchableRecord,以便让它们更好地与 GRDB 配合使用。这是在对我关于这个主题的第一篇文章的回复中提出的。

这是我正在寻找帮助重做的代码,因此它可以与 GRDB 一起使用。我的应用程序使用这种类型的代码从数据库表构建数组。很标准的流程。

到目前为止,这是我想出的。它不会产生任何警告或错误,但我很确定它并不完全正确。再次,提前感谢您的帮助。

0 投票
1 回答
133 浏览

ios - 如何使用 GRDB 在 iOS 上查询具有 1-1 关联的表?

在我的 iOS 项目中,我使用GRDB来管理 SQLite 数据库。我尝试查询具有 1-1 关联的表。

在我的数据库中,假设我有 2 个表:

这两个实体通过 1-1 关联链接,这要归功于idSong.

这是我尝试过的:

  • Selection实体:
  • Song实体:
  • 一个SelectionSong结构:
  • 这是我创建这两个表的方式:
  • 以下是我尝试获取 的列表的方法SelectionSong,因此我可以获得 的列表Selection,以及每个Selection相关的列表Song

但后来我收到以下错误:missing scope 'song'

那么如何查询我的Selection表,以便获得SelectionSong(aSelection和关联的Song)列表?

谢谢。

0 投票
0 回答
34 浏览

ios - GRDB 框架导致 TestFlight 崩溃:如何纠正这种情况?

我有一个可以在模拟和物理设备上完美运行的项目。它使用我创建的提供游戏逻辑的框架。最初这个框架包含一个访问 sqlite 的框架,GRDB。这似乎引起了问题,因为 App Store 验证不允许这种嵌套。

因此,我将 GRDB 移动到与游戏相同的层级,为了让它们进行通信,我的解决方案是让主 viewController 中的 GRDB 实例成为游戏的委托。我不介意这一点,在某些方面它改进了应用程序的结构。

但是我无法让app集成GRDB,线索似乎在这个,也就是项目的文件排列:

档案整理

那些红色的项目一定是问题所在,但我不知道如何配置它来解决它。文档对我来说是不透明的,但我可以弄清楚这些项目不是项目本地的。选择单个红色 GRDB 框架文件表明它们用于非 iOS 目标,这是唯一的 iOS 项目。这也将用于生产,所以我也不需要测试。

这是在哪里配置的?还是我走错了路?当我通过 TestFlight 运行项目时,它在我的 iOS 设备上崩溃,每当我实例化 GRDB 框架时,在启动时,我已经发送了崩溃报告,但没有出现在 Organizer 中。

0 投票
1 回答
257 浏览

swift - SwiftUI FileDocument 使用 Sqlite 和 GRDB

在基于文档的 SwiftUI 应用程序中,我想使用 GRDB 作为 Sqlite 包装器将每个文档保存到单独的 Sqlite 文件中。在实现协议的文档中加载 Sqlite 文件很简单,方法是为要加载的文件FileDocument创建一个DatabaseQueue并使用其.backup(to:)方法复制到内存中DatabaseQueue。我应该如何在方法中实现保存func fileWrapper(configuration: WriteConfiguration)?似乎没有明显的方法可以使用相同的.backup(to:)方法。

我发现了 Andre Yonadam 的一个示例应用程序,它在 NSDocument 的子类中以相同的方式处理这个问题:

0 投票
1 回答
145 浏览

ios - 使用 GRDB 禁用或推迟外键强制执行以进行数据库迁移

我已经在我的移动应用程序中使用了 GRDB 库。所有当前功能都运行良好,我已经开始实施从早期数据库版本的迁移。为了与我在其他平台上的实现保持一致,我决定使用 SQLiteuser_version而不是 GRDB 自己的迁移框架,它使用自己的表。

随着表的更改、复制、创建和删除,一个迁移步骤(数据库版本)中的更改发生相互依赖。由于在事务结束时提交更改,这会导致外键违规,升级失败。

解决此问题的一种方法是通过延迟(defer_foreign_keyspragma)或暂时禁用它以设置foreign_keyspragma 的事务来防止外键强制执行。不幸的是,我对这两种选择都不太满意。例如,经过一些测试注意到,尝试关闭外键检查

并使用阅读编译指示

或通过检查数据库表明foreign_keys设置保持打开。

我的迁移步骤看起来稍微简化了,如下所示:

我最初的 GRDB 设置如下:

在数据库迁移期间防止这些外键失败的最佳方法是什么,为什么我的 pragma 语句不起作用?