NSDictionary のキーとして使用するクラスを実装しようとしています。ドキュメントによると、オブジェクトをキーとして使用するには、私が行った NSCopying プロトコルを実装する必要があります。
オブジェクトがディクショナリに正しく格納されていることを確認できても、値が不思議なことに nil になっているように見える、非常に奇妙な動作が見られます。
copyWithZone: と isEqual: は、私が見る限り正しく実装しましたが、まだ機能していません。
NSDictionary のキーとして使用するクラスを実装しようとしています。ドキュメントによると、オブジェクトをキーとして使用するには、私が行った NSCopying プロトコルを実装する必要があります。
オブジェクトがディクショナリに正しく格納されていることを確認できても、値が不思議なことに nil になっているように見える、非常に奇妙な動作が見られます。
copyWithZone: と isEqual: は、私が見る限り正しく実装しましたが、まだ機能していません。
ドキュメントで明確にされていないのは、オブジェクトを NSDictionary のキーとして使用するには、isEqual: と hash メソッドの両方をオーバーライドし、NSCopying を実装する必要があることです。
isEqual: と hash の契約は、isEqual: が 2 つのオブジェクトに対して YES を返す場合、それらのハッシュ メソッドは同じ値を返さなければならないというものです。等しくない 2 つのオブジェクトが同じハッシュを持つことは問題ありませんが、等しい場合は同じハッシュを持つ必要があります。
ハッシュを正しくオーバーライドしないと、ディクショナリから読み書きしようとするときに、あらゆる種類のデバッグが困難な問題が発生します。