にNSInteger変数を渡すはNSMutableDictionaryまたはNSMutableArrayの
[userSettingsFromFile setObject:@"someObject" forKey:@"aTemp"];
にはどうすればNSInteger
変数を使用できますか?
にNSInteger変数を渡すはNSMutableDictionaryまたはNSMutableArrayの
[userSettingsFromFile setObject:@"someObject" forKey:@"aTemp"];
にはどうすればNSInteger
変数を使用できますか?
NSInteger
はオブジェクトではありません。つまり、32ビットの場合はint
、64ビットの場合はlong
に型キャストするだけです。 NSDictionary
はオブジェクトのみを格納できるため、格納する前に整数をオブジェクトにラップする必要があります。これを試してください:あなたがsetObjectに通過するものは何でも
NSInteger temp = 20;
[userSettingsFromFile setObject:[NSNumber numberWithInteger:temp]
forKey:@"aTemp"];
NSDictionayから戻すには、NSInteger temp = [[userSettingsFromFile objectForKey:@ "aTemp"] integerValue]のようなものを使用する必要があります。 – JScarry
がNSObject
から派生する必要があります。 NSInteger
ではなく、単純なint型typedefです。 2番目の例では、NSObject
から派生したNSString
を使用します。
コレクションに数値を格納するには、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];
訂正:setObject:
を通過しているものは何でもNSObject
クラスから派生する必要はありませんが、それはretain
とrelease
を定義NSObject
プロトコルに準拠する必要があります。
紛らわしいかもしれませんが、クラスとプロトコルには異なる名前空間があります。そして、NSObject
というクラスとプロトコルの両方があり、クラスNSObject
はプロトコルNSObject
に準拠しています。もう1つのルートクラスがあり、NSProxy
クラスもNSObject
プロトコルに準拠しています。まだ軽量プロキシルートクラスを持ちながら、それ以外のプロキシは、コレクションやオートリリースプールで使用することができなかったので
これは、重要です。
長い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];
だけ使用します。$(variable)
構文は、プリミティブ型のオブジェクトに変換します。 @Mattボールの答えと呼ば
:NSIntegerはオブジェクトではありません - それは、64ビットで、32ビットまたは長期にint型に単純型キャストです。NSDictionaryはオブジェクトのみを格納できるので、格納する前にオブジェクトに整数をラップする必要があります。
ので、スウィフトの場合には、これはあなたがそれを行う方法です。
let temp:NSInteger = yourInteger.hashValue
あなたのタイトルが間違っている - あなたのサンプルコードによると、あなたはNSMutableDictionary、ないNSMutableArrayのを使用しています。 –
タイトルを編集しました。とにかく、この問題はNSMutableArrayと一般的なコレクションでも発生する可能性があります。 – mouviciel