我需要创建一个CoreData获取请求来获取类型为" List"的ManagedObject。哪些属性包括:name(String),hitCount(Int),lastUpdated(Date)和contents(OrderedSet)。现在我需要使用" Media"填充我的TableView。 List对象的contents属性中的ManagedObjects。当我已经拥有了List的实例时,我想要我尝试过......
let fetchRequest = NSFetchRequest<Media>(entityName: "Media")
fetchRequest.predicate = NSPredicate(format: "SELF in %@", list.contents)
...它给了我CoreData中的内容,但没有任何NSFetchedResultsControllerDelegate更新通过网络调用获得的其他对象,并在我最初的抓取后添加到数据库中。我也试过......
let fetchRequest = NSFetchRequest<Media>(entityName: "List")
fetchRequest.predicate = NSPredicate(format: "name == %@", list.name)
...返回List项,我将获得NSFetchedResultsControllerDelegate更新,但只有类型在List对象本身上移动 - 而不是当它&#39时应用于TableView(删除/插入等)所需的实际更改; s内容属性更改。有没有办法实现我想要做的事情?非常感谢任何帮助。
答案 0 :(得分:2)
如果反向关系为1,称为listRelationship
,则可以使用:
let fetchRequest = NSFetchRequest<Media>(entityName: "Media")
fetchRequest.predicate = NSPredicate(format: "listRelationship == %@", list)
作为FetchedResultsController的底层提取。如果关系为-to,则将谓词更改为“ANY listRelationship ==%@”。在任何一种情况下,都很难确保FRC使用的排序顺序与List
对象中的NSOrderedSet匹配。
如果这对您很重要,则需要使用index属性显式建模排序顺序。如果关系是一对,则可以将index
属性添加到Media
实体,但如果它是多对的,则生活变得更加困难:Media
对象可能是一个列表中的第一个项目,但是另一个列表中的最后一个项目 - 因此索引与特定列表和特定媒体项目相关。在这种情况下,添加另一个实体“ListEntry”,其中包含index
属性以及与List
和Media
的一对一关系(每个都有多对多的反转)。