我对Core Data的更复杂部分还不熟悉。
我的应用程序有一个15K行的核心数据存储。只有一个实体。
我需要在按计算的搜索条件筛选的表格视图中显示这些行的子集,并且对于显示的每一行,添加一个我实时计算但不存储在实体中的值。
计算需要使用用户提供的几个值。
一个假设的例子:
实体:包含字段" id"," first"和" second"
用户输入:10和20
搜索/过滤条件:仅显示实体字段" id"是两个提供的数字之间的素数。 (我想在这里构建一些复杂的谓词方法?)
显示:符合条件的所有记录的所有字段,以及派生字段(不在核心数据实体中),即" id"字段和随机数,因此tableview中的每一行都包含4个字段:
" id"," first"," second", - 计算值 -
从我的阅读/谷歌搜索看来,似乎可以采用瞬态属性,但考虑到搜索条件和结果属性需要根据用户输入计算,我无法解决这个问题
有人能给我任何能帮我实现这段代码的指针吗?我现在很迷茫,我可以在书本上找到的例子也不能满足我的特殊需求,以便我尽可能地适应它们。
由于
达伦。
答案 0 :(得分:1)
您需要做的第一件事就是不再考虑字段,行和列,因为这些结构实际上都不是Core Data的一部分。在这种情况下,它很重要,因为Core Data支持任意复杂的提取,但sqlite存储不支持。因此,如果您使用sqlite存储,则您的提取受到SQLite支持的限制。
在这种情况下,针对SQLite的谓词不能执行复杂的操作,例如计算属性值是否为素数。
第一种情况的最佳解决方案是添加布尔属性isPrime
,然后修改id
属性的setter来计算set id值是否为prime,然后设置相应地isPrime
。这将存储在SQLite存储中,并且可以针对例如isPrime==YES &&((first<=%@) && (second>=%@))
第二种情况只是使用一个瞬态属性,当托管对象在内存中时,您将提供一个自定义getter来计算其值。
一个经常被忽视的选择是不使用sqlite存储,而是使用XML存储。如果数据量相对较小,例如几千个文本属性,总内存占用量为几十亿,然后XML存储将超级快,可以处理更复杂的操作。
SQLite是Core Data中发育不良的继子。它对大型数据集和低内存很有用,但随着内存变得越来越丰富,它的优势正在逐渐消失。这些天我发现自己少用它。您应该考虑在这种特殊情况下是否需要sqlite。