ios - 如何创建谓词来过滤具有可转换类型的字段上的实体?
问题描述
我只是拥有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”而终止应用程序,原因:“不支持的函数表达式计数:(学生)”
解决方案
Transformable
由于字段可以保存任何数据,因此无法通过您的自定义类型使用谓词进行获取。因此,您的所有请求都将使用瞬态属性,但是“您无法使用基于瞬态属性的谓词进行获取(尽管您可以使用瞬态属性自己在内存中进行过滤)。” 来自 https://developer.apple.com/documentation/coredata/nspropertydescription。
在内存中过滤数组的唯一方法:
let filtered = allServices.filter { $0.students.count > 0 }