Swift 核心数据谓词
Swift Core Data Predicate
我想使用“NSPredicate”使用关系 属性 值过滤核心数据(每个子列表有一个原始列表,每个列表有很多子列表)
子列表实体
@NSManaged public var addedDate: Date?
@NSManaged public var id: UUID?
@NSManaged public var index: Int16
@NSManaged public var title: String?
@NSManaged public var origin_List: ListOfTasks? // its optional and I need to filter sublist using its id property
@NSManaged public var tasks: NSSet?
列表实体
@NSManaged public var id: UUID? // filter sublist using this id
@NSManaged public var index: Int16
@NSManaged public var title: String?
@NSManaged public var comments: NSSet?
@NSManaged public var groupSublists: NSSet?
@NSManaged public var origin_Group: ListOfTasks?
@NSManaged public var sublists: NSSet? // The sublists
所以我需要确保 origin_list 不为零,对于 origin_list.id 我有 wrappedId 然后查找 id 是否等于特定 id,在 swift 中就像以下代码
if sublist.origin_List != nil && sublist.origin_List!.wrappedId == someId {
// get all the matched sublists
}
但我不知道如何将其传递给“NSPredicate”
使用“%K != nil”检查 nil,因此谓词的第一部分将是
NSPredicate(format: "%K != nil", #keyPath(Sublist.origin_List))
(将 Sublist
替换为该实体的实际名称)
第二部分将使用与 swift
中类似的点符号
NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])
然后可以将其组合成一个复合谓词
NSCompoundPredicate(andPredicateWithSubpredicates: [
NSPredicate(format: "%K != nil", #keyPath(Sublist.origin_List)),
NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])
])
话虽如此,您应该先尝试仅使用第二个谓词,因为我怀疑 SQL 中的 nil 检查是多余的。所以希望答案很简单
NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])
我想使用“NSPredicate”使用关系 属性 值过滤核心数据(每个子列表有一个原始列表,每个列表有很多子列表)
子列表实体
@NSManaged public var addedDate: Date?
@NSManaged public var id: UUID?
@NSManaged public var index: Int16
@NSManaged public var title: String?
@NSManaged public var origin_List: ListOfTasks? // its optional and I need to filter sublist using its id property
@NSManaged public var tasks: NSSet?
列表实体
@NSManaged public var id: UUID? // filter sublist using this id
@NSManaged public var index: Int16
@NSManaged public var title: String?
@NSManaged public var comments: NSSet?
@NSManaged public var groupSublists: NSSet?
@NSManaged public var origin_Group: ListOfTasks?
@NSManaged public var sublists: NSSet? // The sublists
所以我需要确保 origin_list 不为零,对于 origin_list.id 我有 wrappedId 然后查找 id 是否等于特定 id,在 swift 中就像以下代码
if sublist.origin_List != nil && sublist.origin_List!.wrappedId == someId {
// get all the matched sublists
}
但我不知道如何将其传递给“NSPredicate”
使用“%K != nil”检查 nil,因此谓词的第一部分将是
NSPredicate(format: "%K != nil", #keyPath(Sublist.origin_List))
(将 Sublist
替换为该实体的实际名称)
第二部分将使用与 swift
中类似的点符号NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])
然后可以将其组合成一个复合谓词
NSCompoundPredicate(andPredicateWithSubpredicates: [
NSPredicate(format: "%K != nil", #keyPath(Sublist.origin_List)),
NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])
])
话虽如此,您应该先尝试仅使用第二个谓词,因为我怀疑 SQL 中的 nil 检查是多余的。所以希望答案很简单
NSPredicate(format: "%K = %@",
argumentArray: [#keyPath(Sublist.origin_List.id), someId])