2017-05-02 1 views
0

내 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해야합니까? 그렇게하지 않으면

+1

가 왜 적용하려고하지 않는'(사용 :) 필터링''sortedArray (사용 :)의 결과에'? 그러나 'filtered'를 호출하기 전에'sortedArray..'의 결과를 NSArray에 캐스팅하는 것을 잊지 마십시오. – Toldy

답변

0

나의 이해 당으로, 귀하의 질문이 핵심 데이터와 관련이없는, 그것은 정렬과 같은 배열에 필터링과 관련되어 있으므로, 다른 방법으로 코드

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

다음 시도하십시오 명시 적 필터를 추가하고 결과 배열을 정렬하려는 경우 가져 오기 요청을 만들고 정렬 설명자를 사용하여 조건자를 추가 할 수 있으므로 예상 결과를 얻을 수 있습니다.

+0

이 방법도 저에게 효과적입니다. 나는 더 나은 해결책이 무엇인지 모르겠다. 그래서 투표에 따라 대답을 선택하겠다. –

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