1

자식 및 상위가 많은 관계를 갖는 하위 항목을 필터링하는 가져 오기 요청에 대한 도움이 필요합니다. 내가 찾은 모든 예는 일대 다 관계에 대한 것입니다.핵심 데이터 엔티티 및 엔티티 관계에 대한 필터가 포함 된 다수 가져 오기

재생 목록은 노래 관계를 통해 많은 노래를 포함 할 수 있습니다. 노래는 재생 목록 관계를 통해 많은 재생 목록에있을 수 있습니다. 이러한 관계는 서로 반대입니다. 재생 목록 ID = 1과 노래 이름이 "A"로 시작되는 나는 노래의 필터링 된 목록을 찾기 위해 노력하고

enter image description here

는 객체.

나는 많은 것들을 시도했지만, 모두를위한 코드를 포함하고 싶지는 않지만, 서브 쿼리 시도, 재생 목록 가져 오기, 노래 nsrediate 실행 시도 (nsarray로 변환), 다른 몇 가지.

내가 원한 것에 가장 가깝다고 생각합니다.

답변

3

술어를 작성하는 데 stringWithFormat을 사용하지 마십시오. 검색 문자열 (playlistID, songQuery)에 특수 문자가 들어 있으면 특히 실패합니다 (예 : "). predicateWithFormat 올바르게 모든 경우를 처리하기 때문에

훨씬 더 안전한 방법은

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY playlists.playlist_id =[cd] %@ AND name BEGINSWITH[c] %@", playlistID, songQuery]; 
[request setPredicate:predicate]; 

입니다.

(이 경우에도 하나의 SQL 쿼리 "준비된 문"을 사용해야하는 이유는 주로 같은 이유입니다 : http://xkcd.com/327/ 아마 코어 데이터와 함께 일어나지 않을 것입니다 :-) 실제로 검색 할 수 있도록 사용자가 필요

+0

일부 노래 이름으로 따옴표를 사용하면 따옴표로 시작하므로 감사합니다. – Augie

0

물론 이것을 알아 내려고 몇 시간이 지난 후에이 질문을 게시 한 후 몇 분만에 답변을 찾을 수 있습니다.

NSString *queryStr = [NSString stringWithFormat:@"ANY playlists.playlist_id =[cd] \"%@\" AND name BEGINSWITH[c] \"%@\"", playlistID, songQuery]; 
[request setPredicate:[NSPredicate predicateWithFormat: queryStr]];