基于数组属性大小的 NSFetchRequest
Posted
技术标签:
【中文标题】基于数组属性大小的 NSFetchRequest【英文标题】:NSFetchRequest based on array property size 【发布时间】:2017-08-24 07:13:02 【问题描述】:我有一个NSManagedObject
,它有一个(可转换的)NSArray
属性arrayProperty
。
我想对属性大小小于 5 的对象执行 fetch 请求过滤。我试过了
[NSPredicate predicateWithFormat:@"arrayProperty.@count <= 5"]
和
[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"]
但它们都不起作用(给Unsupported function expression count
和Unsupported function [SIZE]
)。
有没有办法做到这一点?
【问题讨论】:
如果您从 SQLite 存储中获取则不会:可转换存储为 blob - CoreData 无法将您的谓词转换为可以分析 blob 的 SQL where 子句。要么获取所有内容并在内存中过滤,要么检查您的数组是否实际上应该建模为一对多关系。 【参考方案1】:这种事情对于可变形的属性是不可能的。 Transformable 可以方便地存储数据,但是一旦它们被存储,它们就是这样——一堆字节,没有关于创建它们的数据结构的信息。 SQLite 不知道它是一个数组,所以它不能做诸如计算数组中有多少项之类的事情。
如果您使用可转换属性,您将失去任何基于它们进行过滤的能力,除非是非常基本的测试,例如值是否为 nil。
如果您需要进行此类过滤,则需要考虑如何更改数据模型。一种可能性是,不保存数组,而是创建一个具有一对多关系的新实体来存储值。
【讨论】:
谢谢。这就是我的想法,但在任何地方都找不到。将 NSNumber* arrayCount 添加到我的模型中...以上是关于基于数组属性大小的 NSFetchRequest的主要内容,如果未能解决你的问题,请参考以下文章