gpt4 book ai didi

cocoa - 根据 transient 计算值查询核心数据存储

转载 作者:行者123 更新时间:2023-12-03 18:00:08 25 4
gpt4 key购买 nike

我对核心数据更复杂的部分还很陌生。

我的应用程序有一个包含 15K 行的核心数据存储。有一个实体。

我需要在根据计算的搜索条件过滤的 TableView 中显示这些行的子集,并为显示的每一行添加一个我实时计算但不存储在实体中的值。

计算需要使用用户提供的几个值。

一个假设的例子:

实体:包含字段“id”、“first”和“second”

用户输入:10 和 20

搜索/过滤条件:仅显示实体字段“id”是两个提供的数字之间的质数的记录。 (我假设我需要在这里构建某种复杂的谓词方法?)

显示:满足条件的所有记录的所有字段,以及派生字段(不在核心数据实体中),该字段是“id”字段和随机数的总和,因此 TableView 中的每一行将包含 4 个字段:

“id”,“第一个”,“第二个”,-计算值-

从我的阅读/谷歌搜索看来, transient 属性可能是可行的方法,但考虑到搜索条件和结果属性需要根据用户输入进行计算,我无法弄清楚如何做到这一点。

有人可以给我任何指示来帮助我实现这段代码吗?我现在很迷茫,我在书本等中找到的例子并不能很好地满足我的特定需求,据我所知,我无法适应它们。

谢谢

达伦。

最佳答案

您需要做的第一件事是停止考虑字段、行和列,因为这些结构实际上都不是核心数据的一部分。在这种情况下,这一点很重要,因为 Core Data 支持任意复杂的获取,但 sqlite 存储不支持。因此,如果您使用 SQLite 存储,您的提取将受到 SQLite 支持的限制。

在这种情况下,针对 SQLite 的谓词无法执行复杂的操作,例如计算属性值是否为素数。

第一种情况的最佳解决方案是添加 bool 属性 isPrime然后修改您的 id 的 setter 属性来计算设置的id值是否为素数,然后设置isPrime因此。它将存储在 SQLite 存储中,并且可以例如通过以下方式获取: isPrime==YES &&((first<=%@) && (second>=%@))

第二种情况只是使用一个 transient 属性,您可以为其提供自定义 getter,以在托管对象位于内存中时计算其值。

一个经常被忽视的选项是不使用 sqlite 存储,而是使用 XML 存储。如果数据量比较小,例如几千个文本属性,总内存占用为几十兆,那么 XML 存储将非常快,并且可以处理更复杂的操作。

SQLite 有点像 Core Data 中发育不良的继子。它对于大数据集和低内存很有用,但随着内存变得越来越充足,它失去了优势。我发现自己这些天用它的次数越来越少了。您应该考虑在这种特殊情况下是否需要 sqlite。

关于cocoa - 根据 transient 计算值查询核心数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7907543/

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