2009-08-27 10 views
37

にNSInteger変数を渡すはNSMutableDictionaryまたはNSMutableArrayの

[userSettingsFromFile setObject:@"someObject" forKey:@"aTemp"]; 

にはどうすればNSInteger変数を使用できますか?

+0

あなたのタイトルが間違っている - あなたのサンプルコードによると、あなたはNSMutableDictionary、ないNSMutableArrayのを使用しています。 –

+0

タイトルを編集しました。とにかく、この問題はNSMutableArrayと一般的なコレクションでも発生する可能性があります。 – mouviciel

答えて

90

NSIntegerはオブジェクトではありません。つまり、32ビットの場合はint、64ビットの場合はlongに型キャストするだけです。 NSDictionaryはオブジェクトのみを格納できるため、格納する前に整数をオブジェクトにラップする必要があります。これを試してください:あなたがsetObjectに通過するものは何でも

NSInteger temp = 20; 
[userSettingsFromFile setObject:[NSNumber numberWithInteger:temp] 
         forKey:@"aTemp"]; 
+2

NSDictionayから戻すには、NSInteger temp = [[userSettingsFromFile objectForKey:@ "aTemp"] integerValue]のようなものを使用する必要があります。 – JScarry

2

NSObjectから派生する必要があります。 NSIntegerではなく、単純なint型typedefです。 2番目の例では、NSObjectから派生したNSStringを使用します。

5

コレクションに数値を格納するには、NSNumberインスタンスで数値をラップする必要があります。

double aDouble = 20.3d; 
NSInteger anInt = 20; 

NSNumber *aWrappedDouble = [NSNumber numberWithDouble:aDouble]; 
NSNumber *aWrappedInt = [NSNumber numberWithInteger:anInt]; 

NSArray *anArray = [NSArray arrayWithObjects:aWrappedDouble, aWrappedInt, nil]; 
0

訂正:setObject:を通過しているものは何でもNSObjectクラスから派生する必要はありませんが、それはretainreleaseを定義NSObjectプロトコルに準拠する必要があります。

紛らわしいかもしれませんが、クラスとプロトコルには異なる名前空間があります。そして、NSObjectというクラスとプロトコルの両方があり、クラスNSObjectはプロトコルNSObjectに準拠しています。もう1つのルートクラスがあり、NSProxyクラスもNSObjectプロトコルに準拠しています。まだ軽量プロキシルートクラスを持ちながら、それ以外のプロキシは、コレクションやオートリリースプールで使用することができなかったので

これは、重要です。

0

長いinteger.Whatは、以下のためにNSIntegerは同義語であるがNSIntegerが定義されている方法である。

#if __LP64__ || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
typedef unsigned long NSUInteger; 
#else 
typedef int NSInteger; 
typedef unsigned int NSUInteger; 
#endif 

のNSNumberは、Objective-Cのクラス、具体的にはNSValueのサブクラスです。あなたは、符号付きまたは符号なしのchar、short int、int、long int、long long int、float、doubleまたはBOOLからNSNumberオブジェクトを作成できます。

主な違いの1つは、NSNumberをコレクションオブジェクトが必要なNSArray。あなたがNSArrayのにフロートを追加する必要がある場合たとえば、あなたは最初のフロートからのNSNumberオブジェクトを作成する必要があります:

float percentage = 40.5; 
... //今に挿入できるのNSNumberオブジェクトを作成しますNSArrayの

NSNumber *percentageObject = [NSNumber numberWithFloat:percentage]; 
0

だけ使用します。$(variable)構文は、プリミティブ型のオブジェクトに変換します。 @Mattボールの答えと呼ば

0

:NSIntegerはオブジェクトではありません - それは、64ビットで、32ビットまたは長期にint型に単純型キャストです。NSDictionaryはオブジェクトのみを格納できるので、格納する前にオブジェクトに整数をラップする必要があります。

ので、スウィフトの場合には、これはあなたがそれを行う方法です。

let temp:NSInteger = yourInteger.hashValue 
関連する問題