のObjective-CNSDictionaryのキーにSKNodeオブジェクトを使用していますか? (問題の比較)
このコードを考えてみましょう:
SKNode *n1 = [SKNode new];
SKNode *n2 = [SKNode new];
NSMutableDictionary *d = [NSMutableDictionary new];
[d setObject:@"A" forKey:n1];
[d setObject:@"B" forKey:n2];
if ([d objectForKey:n1]) {
NSLog(@"true");
}
私はNSDictionaryの中にキーとしてSKNodeを使用しています。 SKNodeがキーとして存在するかどうかをテストする必要があります。上記の結果は "true"を返さない(または印刷する)わけではないので、テストのための一般的なアプローチは機能していないようです。次のコードもありません。
if ([d allKeys] containsObject:n1]) {
NSLog(@"true");
}
私はキーストリングを作成します。すなわち、「キー1」、「キー2」、「真」が印刷される。
このようにテストできますか?
私はちょうど(目的cの)同じ実験をしましたが、私はその結果の説明がないので、答えるのをためらった。一般的に '[[オブジェクトコピー] isEqual:object] == YES'のようなケースではないでしょうか?そのため、NSCopyingに準拠すれば辞書キーで十分です。 – danh
それが真実であればわかりやすくなりますが、ほとんどの場合それが真実だと思いますが、NSCopyingの非公式の要件ではありません。それはあなたがノードを複製することを可能にするために 'copy()'を実装することを選択したようで、新しいノードが古いものと等しくないことを念頭に置いてください。 – jtbandes
NSMapTableが機能しているようです。 –