我有两个类,一个名为Folder
,另一个名为Entry
。
在我的数据模型中,文件夹将包含多个条目,并且条目可以包含在不同的文件夹中。
因此每个文件夹都有一个folderID
来标识自己,以及一个名为entries
的关系,用于包含Entry
个实例。每个条目都有一个名为superFolders
的反向关系,它指向包含它的文件夹。
现在是我的问题。我在这里得到folderID
。我想使用它和NSFetchRequest
来获取Core Data中此特殊文件夹中包含的所有entries
。以下是主要代码:
let fetchRequest = NSFetchRequest<Entry>(entityName: "Entry")
fetchRequest.predicate = NSPredicate(format: "(ANY folder in %K).folderID = %i", #keyPath(Entry.superFolders), folerID)
上面代码中的格式字符串不正确,但它主要解释了我的意思。由于superFolders
属性实际上是核心数据中的NSSet
,因此我无法使用superFolders.folderID == %i
作为判断条件。我想要的是找到superFolder
属性包含任何元素的所有条目,其folderID
属性与给定的folderID
匹配。
那么可以使用NSPredicate
来表达我对Core Data的意思吗?
答案 0 :(得分:0)
你想:
let fetchRequest = NSFetchRequest<Entry>(entityName: "Entry")
fetchRequest.predicate = NSPredicate(format: "ANY superFolders.folderID = %@", folderID)
如果您在superFolders
关系上有更复杂的匹配,则需要使用SUBQUERY
,但在这种情况下,简单的ANY
谓词可以正常工作。