我的NSManagedObject
有一个(可转换的)NSArray
属性arrayProperty
。
我想对属性大小小于5的对象执行获取请求过滤。我试过
[NSPredicate predicateWithFormat:@"arrayProperty.@count <= 5"]
和
[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"]
但它们都不起作用(提供Unsupported function expression count
和Unsupported function [SIZE]
)。
有没有办法实现这个目标?
答案 0 :(得分:2)
这种事情不可能具有可转换的特性。可转换对于存储数据是方便的,但是一旦它们被存储,它们就是全部 - 一堆字节,没有关于创建它们的数据结构的信息。 SQLite不知道它是一个数组,因此无法计算数组中有多少项。
如果使用可转换属性,则会失去基于它们进行过滤的能力,除非是非常基本的测试,例如值是否为零。
如果您需要进行此类过滤,则需要考虑如何更改数据模型。一种可能性是,不是保存数组,而是创建一个具有多对多关系的新实体来存储值。