2013-10-09 6 views
5

皆さん、私は以下をしようとしています。 は、私は、その配列は次のようになり、「specialLevels」と呼ばれる配列(NSArrayのを)持っている:Objective-Cは、intsの配列にintが入っているかどうかをチェックします

specialLevels = @[@2, @4, @6, @9]; 

これは、int型の配列でなければなりません。 私はint 'currentLevel'(基本int無オブジェクト)も得ました。

そしてcurrentLevelがspecialLevelsの配列に含まれているかどうかを確認したいと思います。 私はメソッド 'containsObject'が存在することを知っていますが、これは私の場合は動作しません。

この場合、何をお勧めしますか?

は、だから私はこのことを考えたが、それは芋ちょっと奇妙な感じ:

if ([specialLevels containsObject:[NSNumber numberWithInt:currentLevel]]) { 
// other code in here 
} 
+8

あなたの問題は何ですか?コード行が気に入らないのですか? – Wain

答えて

11

specialLevelsはintの配列ではありません。 NSNumberオブジェクトの配列です。 @ 2、@ 4、@ 6、@ 8はそれぞれ[[NSNumber numberWithInt:value]を呼び出すのと同等のNSNumberインスタンスを作成します。 containsObjectを呼び出すときには、containsObjectが(isEqual :)を使用して値に一致するように、NSNumberオブジェクトも渡す必要があります。

Objective-C literals hereを読むことができます。

+0

この説明をありがとう! :) – ronnyrr

16

あなたは代わりに書くことができます:

if ([specialLevels containsObject:@(currentLevel)]) { 
    // other code in here 
} 

あなたの他のコードのスタイルに合わせて、より多くのです。

+0

素晴らしい、本当にありがとう!しかし、これはどのように有効なのですか? – ronnyrr

+2

'@ 2'があなたの使用を始める前に何をしているのか理解しましたか? @BrianWalkerの答えは良い概観です。 – Wain

+0

いいえ、私はしませんでしたが、今私は、その説明に感謝します!今私のためにクリア:) – ronnyrr

関連する問題