核心数据关系:过滤和排序

时间:2017-05-02 15:58:17

标签: swift core-data relationship fetch

在我的coredata中,我有两个实体(个人资料,照片)。个人资料与照片有很多关系(照片)。

我可以访问照片:

// all
let photos = profile.photos?.allObjects

// sorted
let photos = profile.photos?.sortedArray(using: [NSSortDescriptor(key: "ordering", ascending: true)])

// filtered
let photos = profile.photos?.filtered(using: NSPredicate(format: "type = 'x'"))

是否有一种简单的方法可以使用关系组合过滤和排序,还是必须创建单独的NSFetchRequest

2 个答案:

答案 0 :(得分:0)

根据我的理解,您的问题与核心数据无关,它与同一阵列的排序和过滤有关,因此请尝试以下代码

let photos = profile.photos?.allObjects
let result = photos
                .filter { $0.type == "x" }
                .sort { $0.ordering < $1.ordering }

另一种方法是,如果您不想在结果数组上添加显式过滤器和排序,那么您可以创建一个获取请求,并添加带有排序描述符的谓词,这样您就可以得到预期的结果。

答案 1 :(得分:0)

谢谢Toldy,这适合我:

var photos = profile.photos?.sortedArray(using: [NSSortDescriptor(key: "ordering", ascending: true)]) as! [Photo] as NSArray
photos = photos.filtered(using: NSPredicate(format: "type = 'x'")) as NSArray
相关问题