使用反向方式过滤核心数据
Filtering core data using the reverse way
我有一个名为 eventTimes
的 属性 核心数据实体。
此 eventTimes
是一个字符串 属性,它可以为空或包含如下四个示例中的值。
-
9:00, 10:00, 14:00, 16:00
-
13:00
-
11:00, 12:00, 15:00, 18:00, 21:00, 23:00, 0:00
-
14:00, 16:00, 19:00
现在我需要根据时间值使用 NSPredicate
过滤它。它需要 NSPredicate
因为它将与 CoreData 的 NSFetchController 和 SwiftUI 一起使用。
示例:给我包含 14:00.
的条目
我需要使用类似
的东西
NSPredicate(format: "eventTimes IN %@", array )
但我的情况恰恰相反,即eventTimes
是数组,对象是另一个元素。
类似
NSPredicate(format: "%@ IN eventTimes", oneTime )
但如果我这样做,它就会崩溃。
有什么办法吗?
eventTimes
不是数组,即使你希望它是。这是一个字符串,您的谓词因此而崩溃。
您可以使用复合谓词针对以下字符串组成查询:
NSPredicate(format: "eventTimes CONTAINS %@", timeString )
并形成一个数组传递给
NSCompoundPredicate(orPredicateWithSubpredicates:)
但这很快就会变得混乱,所以你最好正确地做这件事并形成一个 EventTime
实体,它与 Event
(或者你称之为相关实体)。
这种方法允许您形成复杂的基于时间的搜索,例如“查找 12:00 之前开始的所有事件”,而无需使用魔术字符串格式。
我有一个名为 eventTimes
的 属性 核心数据实体。
此 eventTimes
是一个字符串 属性,它可以为空或包含如下四个示例中的值。
-
9:00, 10:00, 14:00, 16:00
-
13:00
-
11:00, 12:00, 15:00, 18:00, 21:00, 23:00, 0:00
-
14:00, 16:00, 19:00
现在我需要根据时间值使用 NSPredicate
过滤它。它需要 NSPredicate
因为它将与 CoreData 的 NSFetchController 和 SwiftUI 一起使用。
示例:给我包含 14:00.
的条目我需要使用类似
的东西NSPredicate(format: "eventTimes IN %@", array )
但我的情况恰恰相反,即eventTimes
是数组,对象是另一个元素。
类似
NSPredicate(format: "%@ IN eventTimes", oneTime )
但如果我这样做,它就会崩溃。
有什么办法吗?
eventTimes
不是数组,即使你希望它是。这是一个字符串,您的谓词因此而崩溃。
您可以使用复合谓词针对以下字符串组成查询:
NSPredicate(format: "eventTimes CONTAINS %@", timeString )
并形成一个数组传递给
NSCompoundPredicate(orPredicateWithSubpredicates:)
但这很快就会变得混乱,所以你最好正确地做这件事并形成一个 EventTime
实体,它与 Event
(或者你称之为相关实体)。
这种方法允许您形成复杂的基于时间的搜索,例如“查找 12:00 之前开始的所有事件”,而无需使用魔术字符串格式。