-1

我以 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"];

如果我的任何假设有误,请纠正我。作为一个刚接触应用程序开发的人,我之前的陈述更多的是“这是我到目前为止所学到的,如果我错了请纠正我”,而不是“我是对的,你错了”。

4

2 回答 2

1

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

如果您想将数字粘贴到它们中,则需要将数字“装箱”到 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 回答