首页 > 解决方案 > 如何创建谓词来过滤具有可转换类型的字段上的实体?

问题描述

我只是拥有Service具有属性的实体students。该字段的Transformable类型定义在.xcdatamodelm.

在代码中,我的属性定义为[String]

@NSManaged var students: [String]

现在我需要过滤所有学生不为空的服务。

当我这样做时:

let predicate = NSPredicate(format: "students.@count != 0")
let services = Service.mr_findAll(with: predicate) as! [Service]

但是这里出现了一个错误:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的函数表达式计数:(学生)”

标签: iosswiftcore-data

解决方案


Transformable由于字段可以保存任何数据,因此无法通过您的自定义类型使用谓词进行获取。因此,您的所有请求都将使用瞬态属性,但是“您无法使用基于瞬态属性的谓词进行获取(尽管您可以使用瞬态属性自己在内存中进行过滤)。” 来自 https://developer.apple.com/documentation/coredata/nspropertydescription

在内存中过滤数组的唯一方法:


let filtered = allServices.filter { $0.students.count > 0 }


推荐阅读