2012-03-09 5 views
0

CCArrayからNSNumberを削除したいと思います。 removeObject:を使用して13以上のNSNumberを削除すると、何も削除されません。何が起きてる?私はNSMutableArrayを使用しようとしており、正常に動作します。 removeObjectAtIndex:を使用するのは、配列が数値順でないためオプションではありません。CCArrayからオブジェクトを削除できない

CCArray *arr = [CCArray array]; 

for (NSInteger i = 0; i < 20; i++) { 
    [arr addObject:[NSNumber numberWithInt:i]]; 
} 

// Outputs arr count 20 
CCLOG(@"%@: arr count %i ", NSStringFromSelector(_cmd), [arr count]); 

[arr removeObject:[NSNumber numberWithInt:13]]; 

// Still outputs arr count 20 
CCLOG(@"%@: arr count %i ", NSStringFromSelector(_cmd), [arr count]); 
+0

[arr getIndexOfObject:[NSNumber numberWithInt:13]]は何を返しますか?有効なインデックス、またはNSNotFound?それはarrの各要素が正当性チェックと同様に何かを表示する価値があるかもしれません。なぜそれがそこにないのか分かりません... – JTeagle

+0

CCLOG(@ "%i"、[arr indexOfObject:[NSNumber numberWithInt:13]]);上記のコードの最後には2147483647が返されます。 – dxb

+0

NSNotFoundを推測しています。私はそれがオブジェクトの平等テストと関係していると思います。 NSNumber型の2つの別々の変数を作成し、両方とも13に設定し、一方をもう一方に対してテストします - それらを等しいと見なしますか? (申し訳ありませんが、私はココを知らない)。 – JTeagle

答えて

1

これが問題であることが確認できます。 removeObjectを正常に呼び出せましたが、indexOfObject:NSNotFoundを返しました。私はテストケースを書き直し、エラーはなくなった。 CCArrayから離れるもう一つの理由は私が推測します。

この場合、NSMutableArrayを使用することをお勧めします。 slightly better performance of CCArrayは、より良いフレームレートに反映されません。特に、20の要素を持つ配列ではそうではありません。さらに、正しいコードは、速いが正しくないコードより常に優れています。

+0

あなたのスクリーンネームは「Learn Cocos 2D」ですが、あなたはcocos2dの基本的な部分を使わないと言っているのは皮肉なことです。 –

+0

私はあなたがその問題を診断するのに時間を割いた...そして、彼は信用を得ていますか?本当にありがとう。 – JTeagle

+0

@リチャード:私の画面名は「Love Cocos2D」ではありません:) Cocos2Dについては多少の違いがあります。 NSMutableArrayをCCArrayに置き換えるのではなく、特に性能テストの結果、合成テストで約5%のフレームレートしか得られないことが示された後で、 CCArrayは多くの点で問題があることが証明されています。より多くのパフォーマンスが必要な場合は、常に最適化のための他の(そしてより良い)機会がたくさんあるので、私は自分のコードでそれを使用していません。 – LearnCocos2D

関連する問題