2011-10-22 3 views
4

에서 iOS 5 전에, 나는 earlierDate에서 반환 된 날짜를 확인하기 위해 == 연산자를 사용할 수문제 5

if ([[aDate earlierDate:bDate] isEqualToDate:aDate]) 
    [someone doSomething]; 

왜 그렇게 될까요?

실제로는 isEqualToDate:과 비교할 때 ==을 사용하고 earlierDate: 호출을 사용하면 문제가 발생합니다.

+0

어떤 종류의 에러가 발생하고 있습니까? 방금 iOS 5 타겟을위한 iOS 5 앱 건물에이 코드를 넣었습니다. 컴파일러 나 런타임 오류가 없습니다. –

+1

오류가 없습니다; '=='비교는 iOS 5 이전에 예상 된 동작을 제공하고있었습니다. 이제 동일한 동작을 보려면 isEqualToDate :를 사용해야합니다. – raheel

답변

6

포인터 비교 (==)를 사용하고 있었으므로 이제 개체의 비교 방법을 사용해야합니다. 즉, 이전 버전의 iOS에서는 earlierDate: 메서드가 이전에 전달한 객체를 반환합니다. 이제는 새로운 객체 (이전 날짜와 동일한 데이터를 가진 객체)를 만들고 반환합니다.

isEqualToDate: 메서드가 더 적절하므로 포인터 비교와 같이 중단 될 가능성이 적기 때문에 선호됩니다.

+0

문제는 iOS 5 용 문서에서는'earlierDate'가 두 객체 중 하나 ('aDate' 또는'bDate') 중 하나를 반환한다고 여전히 말합니다. 그 정보를 바탕으로, 나는 평등을 위해 더 값 비싼 비교 방법보다는 (포인터) 비교를 위해 이상적으로'=='를 사용해야한다. – raheel

+1

그런 다음 새로운 버그 일 수 있습니다. Apple에 버그 리포트를 제출하고 넘어지는 것을 확인하십시오. – CajunLuke

+0

고마워, 방금 했어. – raheel