2013-04-26 2 views
2

코어 데이터를 처음 접했고 핵심 데이터를 사용하여 이와 같은 쿼리를 작성하는 방법을 모릅니다.관계의 엔티티 수를 기반으로 결과를 얻는 코어 데이터

스키마의 두 엔티티 앨범과 노래가 있습니다. 앨범은 노래와 관련이 많고 관계 이름은 트랙입니다. 나는 모든 앨범을 가져 오기 위해 쿼리를 작성 했으므로 잘 작동합니다. 하지만 이제는 앨범에서 0 곡이 나오지 않도록 조금 변경하고 싶습니다. 나는

[email protected] != 0 
[email protected] != nil 

같은 요청에 조건을 설정하려고하지만이 때문에 장애 유발 될 수 있습니다 작동하지 않습니다?. 관계 또는 무언가를 미리 가져와야합니까? 나는 songCount 속성을 앨범에 추가하고 싶지 않고 노래를해야한다. 이런 식으로 쿼리를 작성하는 가장 좋은 방법은 무엇입니까? 미리 감사드립니다. !

코드 -

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
request.entity = [NSEntityDescription entityForName:@"Album" inManagedObjectContext:[self managedObjectContext]]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
[request setSortDescriptors:[NSArray arrayWithObject:sort]]; 
NSPredicate *albumPredicate = [NSPredicate predicateWithFormat:@"[email protected] > 0"]; 
[request setPredicate:albumPredicate]; 

이것은 내가 뭐가 잘못된 코드에

CoreData: sql: SELECT 0, t0.Z_PK FROM ZALBUM t0 WHERE (SELECT COUNT(*) FROM ZTRACK t1 WHERE (t0.Z_PK = t1.ZALBUM)) > ? ORDER BY t0.ZNAME COLLATE NSCollateNoCase 

디버그 모드 켠 후 콘솔에 뭐가?

+1

'tracks. @ count! = 0'은 그냥 작동해야합니다. –

+0

코드와 문제에 대한 더 자세한 설명을 포함하면 도움이 될 것입니다. *이 기능이 작동하지 않습니다. * 실제로 작동하지 않는 이유를 파악하는 데 도움이되지 않습니다. – Caleb

답변

0

편집 :이 늘 0 노래가 당신의 상점에있는 모든 앨범/

NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entityList = [NSEntityDescription entityForName:@"Albums" inManagedObjectContext:managedObjectContext]; 
[fetchRequestItems setEntity:entityList]; 

[fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"[email protected] != 0 "]]; 

//Sort by last edit ordered 
NSArray *sortDescriptors = [NSArray arrayWithObjects:nil]; 
[fetchRequestItems setSortDescriptors:sortDescriptors]; 

NSUInteger count = [managedObjectContext countForFetchRequest:fetchRequestItems error:nil]; 
+0

이것은 관련이 없습니다 –

+2

나는 투표를 잘못하면서 편집 중이 었습니다. 오류를 수정하고 실수를 저지르기 전에 실수를 바로 잡을 수있는 기회를 제공하십시오. – Dev2rights

+1

미안하지만, OP가 적어도 하나의 노래와 관련된 * 모든 앨범 *을 가져 오기를 원하기 때문에'Album == % @'을 확인하는 것은 의미가 없습니다. –

2

는 당신이 봤어 추적 얻을 것이다 :

[NSPredicate predicateWithFormat:@"[email protected]>0"]; 

편집 :

시도 SQLDebug 켜기 생성 된 SQL 문을 살펴보십시오. fetchrequest가 완료되면 콘솔에서 명령문을 찾을 수 있습니다. 그 방법은 다음과 같습니다. 실행시 전달 된 인수에 "com.apple.CoreData.SQLDebug 1"을 추가하십시오 ("Edit Scheme ..."아래)

+0

@ count! 0 "'and'"tracks. @ count! = 0 "'두 트랙 모두 작동해야합니다. 다른 문제가 있어야합니다. –

+1

네, 맞습니다. 어쩌면 SQLDebug를 켜면 도움이 될 것입니다. – gasparuff

관련 문제