NSDate как ключи для NSDictionary - PullRequest
4 голосов
/ 09 января 2012

Можно ли добавить NSDate в качестве ключей и некоторые массивы в качестве значений в NSDictionary?

У меня нет никаких требований записывать словарь на диск - архивировать или разархивировать, так же, как это нужно этому парню: NSDictionary с NSDates в качестве ключей

Но, почему я хочу, чтобы 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 как разные?

Другое Редактировать:

Кроме того, если мне нужно преобразовать NSDate в NSString с помощью NSDateFormatter, я не могу напрямую проверять даты в пределах диапазона.Мне нужно будет выполнить следующие шаги:

  1. Получить весь массив ключей NSString из словаря
  2. Преобразовать их обратно в массив NSDate
  3. Выполнить предикаты и получить датыв пределах диапазона
  4. Снова преобразовать эти даты обратно в массив строк
  5. Теперь используйте эти строковые ключи для получения значений из словаря!

Итак, есть ли что-нибудь лучшеспособ

1 Ответ

7 голосов
/ 09 января 2012

Да, NSDate объекты могут использоваться в качестве ключей для NSDictionary - любой тип объекта может использоваться в качестве ключа при условии, что он поддерживает протокол NSCopying.Ключи сравниваются с использованием isEqual: и , а не по значению указателя.Подробнее см. В разделе «Обзор» документации NSDictionary.

...