• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在 Core Data 中编写原生 SQL

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:58:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当我在我的项目中使用 Core Data 时,我需要编写一个本地 SQL 查询。我真的需要这样做,因为我现在正在使用 NSPredicate 并且它不够高效(仅在一个案例中)。我只需要编写几个子查询和连接来获取大量行并按特殊字段对它们进行排序。特别是,我需要按其子实体的值总和对其进行排序。现在我正在使用 NSPredicate 获取所有内容,然后我手动对我的结果(数组)进行排序,但这花费的时间太长了,因为有成千上万的结果。

如果我错了请纠正我,但我很确定这不会是一个巨大的挑战,因为有一种在 iOS 应用程序中使用 sqlite 的方法。

如果有人能引导我走向正确的方向,那就太棒了。 提前致谢。

编辑: 让我解释一下我在做什么。 这是我的 Coredata 模型:

Coredata model

这是我的结果在 iPad 上的样子: iPad screenshot

我正在显示一个表格,每个客户一行,每个客户都有他在 2012 年 1 月至 6 月(最后)和 2013 年(当前)的销售额。 Curr 旁边是这两个值之间的差异。毛利率和覆盖率也是一样。

每个客户都保存在 Kunde 表中,每个 Kunde 都有几个 PbsRowPbsRow实际保存的是每个月的销售额总和。

因此,为了显示这些结果,我正在做的是获取 2013 年 1 月至 6 月之间的所有 PbsRows,然后执行此操作:

self.kunden = [NSMutableOrderedSet orderedSetWithArray:[pbsRows valueForKeyPath"kunde"]];

现在我有所有在 2013 年 1 月到 6 月之间有记录的客户 (Kunde)。 然后我使用 for 循环来计算每个客户的总和。

想法是获取当年的销售额并将其与去年进行比较。 糟糕的是有很多客户,for-loop 只需要很长时间:-(



Best Answer-推荐答案


这有点像 hack,但是... SQLite 库能够在给定时间打开多个数据库文件。直接用 SQLite 打开核心数据数据库文件(只读/只读)并打开第二个文件(报告/临时表)是非常可行的。然后可以对 Core Data DB 中的数据执行直接 SQL 查询,并将它们保存到第二个文件中(如果需要持久化)。

这种事情我做过几次。 SQLite 库中有一些功能(例如:全文搜索引擎)未通过 Core Data 公开。

关于ios - 在 Core Data 中编写原生 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511046/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap