NSDate作为NSDictionary的键

时间:2012-01-09 09:41:35

标签: cocoa-touch cocoa nsdate nsdictionary core-foundation

是否可以在NSDictionary中添加NSDate作为键和一些数组?

我没有要求将字典写入磁盘 - 归档或取消归档,就像这个人需要它一样:NSDictionary with NSDates as keys

但是,为什么我希望将NSDate作为特定键添加,以便我可以从字典中获取所有键并进行一些计算,例如从一个范围内获取日期。

具有相同日期值的两个对象在创建时是否共享相同的内存?

是否可以将NSDate作为密钥?此外,我可能会面临这个假设的其他问题吗?

谢谢,

拉​​吉

修改 在发布我的问题后,我刚刚写了一个示例代码:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);

输出:

Date 1 = 7945610, Date 2 = bd03610

但NSDictionary的关键比较是否将这2个NSDate对象解释为不同?

另一个编辑:

另外,如果我应该使用NSDateFormatter将NSDate转换为NSString,我无法直接检查范围内的日期。我将不得不执行以下步骤:

  1. 从字典中获取所有NSString键数组
  2. 将它们转换回NSDate数组
  3. 执行谓词并在范围内获取日期
  4. 再次将这些日期转换回字符串数组
  5. 现在使用此字符串键从字典中获取值!
  6. 那么,还有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

是的,NSDate个对象可以用作NSDictionary的密钥 - 只要它支持NSCopying协议,任何对象类型都可以用作密钥。密钥使用isEqual:按指针值进行比较。有关详细信息,请参阅NSDictionary文档的“概述”部分。