2011-06-27 2 views
0

私は、タイトル、説明などのパブリックアートのいくつかの属性を定義するArtPieceというクラスを持っています。これらは、appDelegate内のmapAnnotationsという配列にArtPieceオブジェクトを格納して、注釈として地図に表示されます。マップの領域が変わったら、リージョンに入ったアーティファクトの情報を取得するためにURL呼び出しを行い、解析された情報からartPieceオブジェクトを作成し、「ArtsXMLParser」というクラスのitemsという配列に追加します。 mapAnnotationsに地図上のすべての芸術品を保持したいと思いますが、地域が変わったときに、マップに重複しない注釈を入れないように、mapAnnotationsにまだないアイテムからアーティファクトだけを追加します。注釈を管理する第3のクラスのメソッドがあります。すべてがうまくいくように見えますが、containsObject:のif文は毎回呼び出されます。したがって、ロギングされているときに同じ情報を持っているにもかかわらず、アートピースは決して一致しません。 2つの配列に全く同じ属性を持つオブジェクトが共通しているかどうかを確認する良い方法はありますか?異なるファイルのオブジェクト配列にcontainsObjectを使う

私はうまく説明されていないものを明確にすることができます。助けてくれてありがとう!

答えて

1

ArtPieceオブジェクトでは、2つのartPiecesが等しい場合にYESを返すようにisEqual:メソッドをサブクラス化する必要があります。このメソッドのデフォルトの実装では、個々のオブジェクトのポインタ値を比較します。あなたの場合は、あなたが望むものではありません。

サブクラス化するときに注意する必要があるいくつかの詳細については、isEqual:のAppleのマニュアルを参照してください。

+0

フィードバックありがとうございます!ですから、isEqualメソッドでは、containsObject:の前のオブジェクトの「受信者」があり、「その他」は後のオブジェクトですか?そして、その方法で受信機をどのように参照するのですか? – Ryan

+0

'isEqual:'メソッドの中で、 'self'は受信機を指します。 – kubi