我有一个NSManagedObject
,它具有(可转换)NSArray
属性arrayProperty
。
我想对属性大小小于5的对象执行获取请求过滤。
[NSPredicate predicateWithFormat:@"arrayProperty.@count <= 5"]
和
[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"]
但它们都不起作用(给出
Unsupported function expression count
和Unsupported function [SIZE]
)。有没有办法做到这一点?
最佳答案
使用可转换属性无法实现这种事情。可转换很方便存储数据,但是一旦存储起来就就足够了-一堆字节,没有关于创建它们的数据结构的信息。 SQLite不知道它是一个数组,因此它无法执行诸如计算数组中有多少项的操作。
如果使用可变形属性,则除了基于最基本的测试(例如该值是否为nil)外,您将失去基于它们进行过滤的能力。
如果需要进行这种过滤,则需要考虑如何更改数据模型。一种可能性是,不用保存数组,而是创建一个具有一对多关系的新实体来存储值。
关于ios - NSFetchRequest基于数组属性的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45855203/