Как разделить NSArray на NSDictionary по дням года в массиве NSDate? - PullRequest
2 голосов
/ 21 ноября 2010

У меня есть NSArray, и я сортирую его по свойству «опубликованного» его объекта в порядке убывания, сначала самое новое:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"published" ascending:YES];
NSArray *descps = [[NSArray alloc] initWithObjects:[sortDescriptor reversedSortDescriptor], nil];
[storiesLocal sortUsingDescriptors:descps];
[descps release];
[sortDescriptor release];

Итак, теперь я хочу разбить этот массив на каждый день, поэтомучто я могу использовать его с UITableView.В моем примере каждая дата будет заголовком раздела таблицы.Поэтому, если в моем примере отсортированный массив (StoriesLocal) имел бы такие даты:

2010-04-05 10:32:00
2010-04-05 06:20:12
2010-04-02 09:23:02
2010-04-02 03:20:34
2010-04-01 04:22:34

Тогда у меня были бы заголовки табличного представления, такие как "5 апреля", "2 апреля", "1 апреля".Поэтому у каждого будет 2, 2 и 1 строка под каждым соответствующим заголовком

По сути, моим желаемым результатом будет NSDictionary.Каждый ключ будет датой (2010-04-02), каждое значение будет NSArray правильных объектов, чтобы идти с ним.Все они должны быть отсортированы по дате.Сначала самое новое.

Я прошел около 3 попыток и каждый раз терпел неудачу, заканчивая тем, что удалил написанный код.

Редактировать: поскольку NSDictionary является неупорядоченным списком, возможно, лучшеиметь массив словарей, каждый из которых содержит ключ для даты и ключ для массива рассказов, поскольку порядок очень важен.

1 Ответ

0 голосов
/ 21 ноября 2010

Это не проверено, но попробуйте что-то вроде:

NSArray *descps as above.

NSDateFormatter *in_formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDateFormatter *out_formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM d"];

NSString *todayStr =
[formatter release];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

for (ObjectType *obj in descps) {
  NSDate *date = [in_formatter dateFromString:[obj published]];
  NSString *day = [out_formatter stringFromDate:date];

  NSArray *array = [dict valueForKey:day];
  if (array == nil) {
    array = [[NSMutableArray alloc] init];
    [dict setValue:array forKey:day];
    [array release];
  }

  [array addObject:obj];
}

[in_formatter release];
[out_formatter release];
...