使用除对象之外的任何值创建字典

时间:2012-09-17 01:46:02

标签: objective-c

我问这个问题是来自PHP背景的人。在php中,数组创建起来非常简单:$ numberArray = array('minute'=> $ minute,'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"];

如果我在任何假设中出错,请纠正我。作为app dev的新手,我之前的陈述更多的是“这是我迄今为止所学到的,如果我错了请纠正我”,而不是“我是对的,你错了”。< / p>

2 个答案:

答案 0 :(得分:1)

NSDictionary和NSArray都存储对象;包括其他词典和数组。

如果你想在一个数字中加上一个数字,你需要在一个NSNumber实例中“加上”这个数字。

您的代码不正确;你需要这样做:

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

答案 1 :(得分:1)

使用Cocoa框架,与许多面向对象的框架/语言一样(与PHP在幕后的内容类似),您只能在集合中存储对象。要存储原始值类型,请将它们包装为对象。对于数字,该类为NSNumber

将您的最后一行更改为:

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

它应该有效。为了让NSUInteger退出,您需要打开NSNumber,其中包含以下内容:

[[timeArray objectForKey:@"minute"] unsignedIntegerValue];