【发布时间】:2017-02-24 00:32:00
【问题描述】:
我需要发出一个 CoreData 获取请求,该请求获取“List”类型的 ManagedObject,其属性包括:name(String)、hitCount(Int)、lastUpdated(Date) 和 contents(OrderedSet)。现在我需要在列表对象的内容属性中使用“媒体”ManagedObjects 填充我的 TableView。当我已经有我想要的内容的列表实例时,我已经尝试过......
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)
...它返回列表项,我将获得 NSFetchedResultsControllerDelegate 更新,但仅在列表对象本身上移动类型 - 当它是内容属性时,不是应用于 TableView(删除/插入等)所需的实际更改变化。有没有办法实现我想要做的事情?非常感谢任何帮助。
【问题讨论】:
-
媒体与列表之间是否存在反向关系?如果是这样,是一对一还是一对多:一个媒体对象可以与多个列表相关吗? (您需要的谓词在每种情况下都不同)。
-
是的,存在反比关系。 List 对象的 content 属性映射到 Media 对象是一对多类型。到目前为止,从 Media 对象到 List 对象的反向关系是一对一类型,但现在考虑一下 Media 对象可以存在于多个列表中,所以可能双方都应该是一对多类型。
标签: ios core-data nsfetchedresultscontroller nsfetchrequest