-1

私はPHPのバックグラウンドを持つ誰かとしてこの質問をしています。PHPでは、配列の作成はめちゃくちゃ簡単です:$ numberArray = array('minute' => $ minutes、'hour' = $ hour)など。

Obj-c / Cocoaに入ると、NSArrayはフラット配列のみを格納していることに気づきました。

 NSMuteableArray *numberArray = [[NSMuteableArray init] alloc];
 [numberArray insertObject:minute atIndex:0];
 // not sure if above is correct, but it's a moot point
 // Creates a non-associate array (numberArray = '1', '2', '3', etc.)

NSDictionaryを使用すると、連想配列を作成できますが、値はオブジェクトである必要があります。

 NSMuteableDictionary *numberArray = [[NSMuteableDictionary alloc] init];
 [numberArray setObject:minute forKey:@"minutes"];
// numberArray creates array of ('minute'=>minuteObject, 'hour'=>hourObject, etc.)

これが私の質問です:VALUEがオブジェクト以外のものである配列を作成できる配列または辞書の形式は何ですか?現在の時刻の分/時間を取得して配列に挿入するメソッドを作成しようとしています。そのメソッドから、アプリケーションの他の場所で必要になったときに、このメソッドを呼び出して、キーから適切な値を取得できます。これが私の完全なコードです:

NSDate *now = [NSDate date];
NSCalendar *gregorianCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComps = [gregorianCal components: (NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate: now];
// Then use it
NSUInteger minute = [dateComps minute];
NSUInteger hour = [dateComps hour];

NSMutableDictionary *timeArray = [[NSMutableDictionary alloc] init];
[timeArray setValue:minute forKey:@"minute"];

私の仮定のいずれかが間違っている場合は、私を訂正してください。アプリ開発に不慣れな人として、私の以前の発言は、「私は正しい、あなたは間違っている」というよりも、「これは私がこれまでに学んだことです。私が間違っている場合は訂正してください」というものでした。

4

2 に答える 2

1

NSDictionaryとNSArrayの両方がオブジェクトを格納します。他の辞書や配列を含みます。

'emに番号を貼り付けたい場合は、NSNumberのインスタンスで番号を「ボックス化」する必要があります。

コードが正しくありません。あなたがする必要があるでしょう:

[timeArray setValue:[NSNumber numberWithUnsignedInteger:minute] forKey:@"minute"];
于 2012-09-17T02:15:26.087 に答える
1

Cocoaフレームワークでは、多くのオブジェクト指向フレームワーク/言語と共通して(そして、PHPが内部で行っていることと同様に)、オブジェクトをコレクションに格納することしかできません。プリミティブ値型を格納するには、それらをオブジェクトとしてラップします。数字の場合、クラスはNSNumberです。

最後の行を次のように変更します。

[timeArray setValue:[NSNumber numberWithUnsignedInteger:minute] forKey:@"minute"];

そしてそれは動作するはずです。取り戻すには、次の行に沿って何かNSUIntegerをアンラップする必要があります。NSNumber

[[timeArray objectForKey:@"minute"] unsignedIntegerValue];
于 2012-09-17T02:18:14.117 に答える