2011-04-12 2 views
14

date1 == date2이 (가) 유효한 비 호환성 비교 방법이 아닙니까? 그렇지 않은 경우 올바른 대안은 무엇입니까? 당신은 두 개의 포인터 값을 비교하고동일한 날짜/시간에 두 개의 NSDate를 비교하십시오.

- (NSDate*) dateWithNoTime { 
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [calendar components:flags fromDate:self]; 
    NSDate* dateOnly = [calendar dateFromComponents:components]; 
    return dateOnly; 
} 

- (BOOL) sameDayAsDate:(NSDate*)dateToCompare { 
    NSDate *date1 = [self dateWithNoTime]; 
    NSDate *date2 = [dateToCompare dateWithNoTime]; 
    return date1 == date2;  // HERE IS WHERE THINGS SEEM TO FAIL 

} 

답변

42

:

여기 내 코드입니다. (이 포인터를 비교는 C의 의미를 취할 것) 당신은 개체의 평등을 비교하는 목표 - C에서 ==을 사용할 수 없습니다

return ([date1 compare:date2] == NSOrderedSame); 
+0

is isqual :이 호출하지 않습니까? –

4

: 당신은 같이있는 NSDate 비교 방법을 사용해야합니다. 다른 언어와 마찬가지로 객체 포인터를 비교하기 만하면됩니다.

당신이 원하는 메시지는 == (평등) 연산자는 동등한 경우 (볼이 개 포인터 값을 비교 (목표 - C 인의 상위 집합) C 언어에서와 마찬가지로 일명 [date1 isEqualToDate:date2]

+3

"Objective-C에서'=='를 사용할 수 없다는 것은 조금 가혹합니다. 당연히 당신은 Greg가 요구하는 목적을 위해서가 아니라 그것을 사용할 수 있습니다. 예, 당신이 쓴 것은 정확 합니다만, 문언은 이상합니다. –

+0

isEqualToDate는 정확한 평등을 검사하므로 결코 true를 반환하지 않습니다. – jdog

8

, isEqualToDate:입니다 즉 두 변수가 동일한 객체를 보유하고있는 경우). 이 값은 원시 값 (ints, chars, bool 초)을 비교하는 데 사용되지만 내용이 같지만 메모리 위치가 다른 Objective-C 오브젝트에서는 작동하지 않습니다 (평등 연산자와 비교).

는 두 객체가 동일한 경우는

확인하려면, NSObject은 일반 문 (예 : [date1 isEqual:date2])로 사용할 수있는 -isEqual: 방법을 제공하고, 일부 클래스는 NSDate의를 비교하는 데 사용 -isEqualToDate:으로,보다 구체적인 비교 방법을 제공하기 위해 선택 , 또는 -isEqualToString:NSString을 비교하는 데 사용됩니다. 이러한 메서드는 객체가 아니기 때문에 기본 유형 (예 : int)을 비교하는 데 사용할 수 없지만 거의 모든 객체에서 작동합니다.