核心数据获取请求与NSFetchedResultsController一对多关系

时间:2019-12-23 07:47:02

标签: ios swift core-data nsfetchedresultscontroller

如果我有多个实体,比如说流派,艺术家,歌曲,并且三个一对多之间存在某种关系,那么假设我有一个通用的NSFetchedResultsController,我该如何搜索流派中的艺术家,即在我的CoreManager类中,我的表视图符合。该代码可以很好地请求实体的内容,但是我不确定是否利用一种流派来显示其中的这些艺术家并转到多个级别。 我的FRC代码是

fetchedResultsController = {
    let request = fetchRequest
    request.sortDescriptors = sortDescriptor
    request.predicate = fetchPredicate
    request.returnsObjectsAsFaults = false
    let context = managedContext
    let frc = NSFetchedResultsController(
        fetchRequest: fetchRequest,
        managedObjectContext: context,
        sectionNameKeyPath: sectionNameKeyPath , cacheName: cacheName)
    return frc
}()

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您希望FRC用Artists过滤Genre,则需要从ArtistGenre添加一个关系({{1}的倒数} artists实体上的关系)。附带说明一下,几乎应该为每种关系都定义一个反函数-在极少数情况下没有反函数的情况会更好。

我不确定您是将每个Genre视为仅包含一个Artist,还是可能将其视为多个-适当地将关系设置为Genreto-one ,并分别命名为to-manygenre。每种情况下所需的谓词将有所不同:

对于一对一,您应该使用

genres

对于许多您会使用

NSPredicate(format:"genre == %@", chosenGenre)

(假设您已经引用了NSPredicate(format:"ANY genres == %@", chosenGenre) ,作为要过滤的流派。如果您实际上只有流派标题,则可以使用:

chosenGenre

对于许多您会使用

NSPredicate(format:"genre.title == %@", chosenGenreTitle)