2011-10-22 7 views
4

のiOS 5の前に、私はearlierDateから返された日付を確認するために==演算子を使用することができ問題5

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

これはなぜそうでしょうか?

実際には、isEqualToDate:を使用して比較する場合は==を使用し、earlierDate:を使用する場合は問題が発生します。

+0

どのようなエラーが表示されますか?私はちょうどiOS 5の目標のためのiOS 5のapp建物にこのコードを落としました、そして、コンパイラかランタイムエラーはありません。 –

+1

エラーはありません。 '=='比較はiOS 5の前に予想される動作を与えていました。同じ動作を見るために、私は 'isEqualToDate:'を使う必要があります。 – raheel

答えて

6

ポインタ比較(==)を使用していたので、オブジェクトの比較方法を使用する必要がありました。つまり、以前のバージョンのiOSでは、earlierDate:メソッドは、以前渡したオブジェクトを返します。さて、新しいオブジェクト(以前の日付と同じデータ)を作成して返します。

isEqualToDate:の方が適しているため、ポインタの比較のように壊れにくいので、より適切です。

+0

問題は、iOS 5のドキュメントでは、 'earlierDate'が2つのオブジェクト(' aDate'または 'bDate')のいずれかを返すと言われています。その情報に基づいて、私は理想的には== '(ポインタ)比較のために、より高価な比較メソッドではなく、等価のために使うべきです。 – raheel

+1

それから新しいバグかもしれません。 Appleにバグレポートを提出し、何が落ちているかを見てください。 – CajunLuke

+0

ありがとう、私はやった。 – raheel