我问这个问题是来自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>
答案 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];