在我的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
?
答案 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