【发布时间】:2014-12-30 22:20:58
【问题描述】:
我正在使用 CoreData 开发我的第一个应用程序,但我正在努力解决我认为的一个常见问题。
假设我有一个实体播放列表,它与另一个实体歌曲和视频具有 多对多 关系。所以我的播放列表对象看起来像这样
class Playlist : NSManagedObject {
var songs: NSSet
var videos: NSSet
}
Song 和 Video 实体都有一个“已删除”布尔字段,我使用它来跟踪已从播放列表中删除的歌曲或视频。我稍后调用我的远程 API 以在服务器端将其删除,但这是出于离线目的。
我想要的是从 CoreData 检索一个播放列表对象,其中包含未删除的歌曲和视频列表(因此那些删除 = false)。
我看到的一个解决方案是通过简单地获取实体播放列表来获取所有元素,然后手动过滤掉,但我想知道我是否可以使用 Core Data 更优雅地做到这一点。
【问题讨论】:
-
您可以只使用
NSPredicate来过滤播放列表的songs和videos属性。或者,您可以使用 NSFetchRequest 来获取带有谓词的 Song 和 Videos 实体,即它们的playlist属性与您的播放列表匹配,并且removed属性是false。无论哪种方式,您都需要分别制作歌曲和视频。