2016-07-27 1 views
1

NSDate 개체 인 creationDate 속성을 사용하여 개체 목록을 필터링해야하는 조건자를 만들어야합니다. 나는 같은 날과 같은 달이 아닌 같은 날이있는 객체 목록을 얻고 싶습니다. 실제적으로, 나는 과거에 (오늘/일로) 오늘 일어난 물건을 원합니다. 이 술어를 어떻게 만들 수 있습니까? 예를 들어 오늘은 2016 년 7 월 27 일이며 7 월 27 일에있는 모든 객체를 creationDate로 지정합니다.NSDate를 NSPredicate와 함께 일/월 단위로 필터링합니다.

답변

3

먼저,

[NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary * bindings) { 
    // object must be cast to the type of object in the list 
    MyObject *myObject = (MyObject *)object; 
    NSDate *creationDate = myObject.creationDate; 

    // do whatever you want here, but this block must return a BOOL 
}]; 

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:date]; 
NSInteger day = [components day]; 
NSInteger month = [components month]; 

다음, 술어를 구축하기 (편도)은 ... 함께 그 아이디어를 퍼팅 ... 날짜에서 하루 달 추출. ..

- (NSPredicate *)predicateMatchingYearAndMonthInDate:(NSDate *)date { 
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:date]; 
    NSInteger day = [components day]; 
    NSInteger month = [components month]; 

    return [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary * bindings) { 
     MyObject *myObject = (MyObject *)object; 
     NSDate *creationDate = myObject.creationDate; 
     NSDateComponents *creationComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:creationDate]; 
     NSInteger creationDay = [creationComponents day]; 
     NSInteger creationMonth = [creationComponents month]; 
     return day == creationDay && month == creationMonth; 
    }]; 
} 

그게 전부입니다. 배열에서 일치시키려는 날짜가 누구인지 NSDate으로 술어를 작성한 다음 해당 술어를 배열 (filteredArrayUsingPredicate:)에서 실행하십시오.

NSDate *today = [NSDate date]; 
NSPredicate *predicate = [self predicateMatchingYearAndMonthInDate:today]; 
NSArray *objectsCreatedToday = [myArray filteredArrayUsingPredicate:predicate]; 
+0

predicateWithBlock을 사용하여 NSPredicate를 만들었지 만, 예를 들어 Photos 프레임 워크에서 지원되지 않는 경우가 있습니다. 블록 사용을 피하면서 동일한 결과를 얻으려면 어떻게해야합니까? –