2012-06-08 5 views
1

NSPredicate에 문제가 있습니다. createDate라는 NSDate가 들어있는 Entry라는 핵심 데이터 객체가 있습니다. 이것을 날짜라고 불리는 변수와 비교하고 싶습니다.NSPredicate 코드는 어떻게 작성합니까?

NSDate 범주를 사용하여 두 개체의 개별 연도를 추출하고 핵심 데이터 범주를 사용하여 핵심 데이터 저장소의 모든 Entry 개체에 대한 조건부를 수행합니다.

[Entry allForPredicate:[NSPredicate predicateWithFormat:@"creationDate.year == %i", date.year]]; 

내가 예상 한 결과를 얻지 못해 잘못 생각한 대신 공백으로 표시됩니다.

어디서이 문제가 발생합니까?

답변

4

코어 데이터는 원시 데이터베이스 호출을 생성 할 때 범주를 통합 할 수 있습니다.

사건에 대한

0시에이 1 월에 1 일 2 날짜, 하나를 만들고 완성도를 위해서 나중에

NSString *basePredicateString = @"creationDate >= %@ AND creationDate < %@"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:basePredicateString, startDate, endDate]; 

일년 - 난의 시작 & 종료 날짜를 생성 할 방법 실제 년도 :

NSDate *startDate = [NSDate date]; 
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit startDate:&startDate interval:NULL forDate:startDate]; 

NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; 
comps.year = 1; 
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:startDate options:0]; 

편집이 답변 아래의 의견에
, 참으로 범주에 incorperated 될 수 있음을 제안 jbrennan 술어. 그는 NSArrays (그는 테스트 프로젝트에 대한 링크를 추가했습니다)로서 컬렉션에 적합하지만 코어 데이터 가져 오기 요청은 작동하지 않습니다. 적어도 작동하게 만들 수는 없습니다. 나는 노력했다. 여기에 내 테스트가 있습니다 : https://github.com/vikingosegundo/CoreDataCategoryTest

+0

나는 카테고리 메쏘드를 통합 할 수 있다고 확신한다. 적어도 NSFetchedResultsController와 NSDate에 대한 category 메소드를 사용할 때 거의 정확히했습니다. – jbrennan

+0

@jbrennan - 코드를보고 싶습니다. – vikingosegundo

+0

술어는 점을 사용하는 오브젝트의 keypath를 따를 것이므로 범주에'-key'가있는 한'date.key'가 평가됩니다. – jbrennan

1

@vikingosegundo가 올바른 대답을 가지고 있습니다. 당신은 술어에서 카테고리를 사용할 수 없습니다.

당신은 SQL을 이해한다면, 다음과 같은 "출시 전달 인수"로 설정하십시오 : 이것은 당신이 요구에 의해 생성되는 SQL을 볼 수 있습니다

-com.apple.CoreData.SQLDebug 1

. 이렇게하면 작성한 술어가 SQL로 어떻게 변환되는지 볼 수 있습니다.


편집 당 다시 @vikingosegundo - 영업 이익의 질문 당 CoreData와 함께 사용하면 위가 적용됩니다.

+0

+1 방금 새로운 것을 배웠습니다 - 고마워요! – vikingosegundo

관련 문제