ios - NSFetchRequest基于数组属性的大小

标签 ios core-data nspredicate

我有一个NSManagedObject,它具有(可转换)NSArray属性arrayProperty

我想对属性大小小于5的对象执行获取请求过滤。

[NSPredicate predicateWithFormat:@"arrayProperty.@count <= 5"]


[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"]

但它们都不起作用(给出Unsupported function expression countUnsupported function [SIZE])。

有没有办法做到这一点?

最佳答案

使用可转换属性无法实现这种事情。可转换很方便存储数据,但是一旦存储起来就就足够了-一堆字节,没有关于创建它们的数据结构的信息。 SQLite不知道它是一个数组,因此它无法执行诸如计算数组中有多少项的操作。

如果使用可变形属性,则除了基于最基本的测试(例如该值是否为nil)外,您将失去基于它们进行过滤的能力。

如果需要进行这种过滤,则需要考虑如何更改数据模型。一种可能性是,不用保存数组,而是创建一个具有一对多关系的新实体来存储值。

关于ios - NSFetchRequest基于数组属性的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45855203/

相关文章:

ios - 创建生命周期唯一 ID 的替代方法

iOS 简单数组谓词

ios - 在新窗口中快速打开 URL

ios - 试图从充满 NSDate 对象的 NSMutableArray 中获取 double 值

iphone - 如何将新数据保存到现有单元格中?

ios - 如何通过删除和重新安装应用程序来持久化 Core Data 中的数据

ios - 使用单个 NSPredicate 过滤多个数组

ios - 如何使用键对嵌套数组进行谓词

ios - 如何在 Swift 中获取选定行的值?

swift - 覆盖核心数据(如果存在)