2013-12-08 2 views
1

Я беру список объектов с сервера, и у них есть дата как свойство. Элементы для велоспорта, которые я получил, мне нужно расположить их в таблице, но поделенные на дни (по разделам).Группировка объектов по дате

У меня проблемы, потому что я смог бы исправить все в цикле.

Что я делаю, используя NSDateFormatteris, создайте массив с количеством разделов. Но логически я не знаю, как создать все внутри цикла.

NSMutableArray *singleSectionArray = [[NSMutableArray alloc] init]; 
NSMutableArray *sectionsArray = [[NSMutableArray alloc] init]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 
     int i = 0; 
     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

     for (PFObject *object in objects) { 
      [df setDateFormat:@"MMMM d EEEE"]; 
      NSString *dateString = [[NSString alloc] initWithFormat:@"%@",[df stringFromDate:object.createdAt]]; 
      NSArray *dateArray = [dateString componentsSeparatedByString:@" "]; 
      BOOL sectionExist = [sectionsArray containsObject:[dateArray objectAtIndex:1]]; 

      if (sectionExist == 0) { 
       [sectionsArray addObject:[dateArray objectAtIndex:1]]; 
       [singleSectionArray addObject:[NSDictionary dictionaryWithObjectsAndKeys: 
               object.createdAt,@"date", 
               object.objectId,@"objectId", 
               nil]]; 
      } else { 
       //??? 
      } 

     } 

... 

[self.tableView reloadData]; 

Я бы такую ​​структуру

//Section 
NSArray *singleSectionArray = [[NSArray alloc] initWithObjects:@"Object 1", @"Object 2", @"Object 3", nil]; 
NSDictionary * singleSectionDictionary = [NSDictionary dictionaryWithObject: singleSectionArray forKey:@"data"]; 
[dataArray singleSectionDictionary]; 
//Section 
NSArray *singleSectionArray = [[NSArray alloc] initWithObjects:@"Object 4", @"Object 5", nil]; 
NSDictionary * singleSectionDictionary = [NSDictionary dictionaryWithObject: singleSectionArray forKey:@"data"]; 
[dataArray singleSectionDictionary]; 

Спасибо

ответ

5

Что-то, как это будет работать:

NSMutableDictionary *sections = [NSMutableDictionary dictionary]; 

for (PFObject *object in objects) { 
    [df setDateFormat:@"MMMM d EEEE"]; 
    NSString *dateString = [df stringFromDate:object.createdAt]; 
    NSMutableArray *sectionArray = sections[dateString]; 
    if (!sectionArray) { 
     sectionArray = [NSMutableArray array]; 
     sections[dateString] = sectionArray; 
    } 

    [sectionArray addObject:@{ @"date" : object.createdAt, @"objectId" : object.objectId }]; 
} 

Это дает вам словарь, где каждый ключ является название раздела (строка даты), и каждое значение представляет собой массив объектов для этого раздела.

Теперь нужно создать массив, содержащий ключи даты, чтобы массив упорядочивался так, как вы хотите, чтобы они отображались в таблице. Вы не можете просто сортировать строки даты, потому что они будут отображаться в алфавитном порядке, а не в хронологическом порядке.

+0

спасибо за ответ, но не могли бы вы также рассказать мне, как вводить данные в массиве? Я просто не могу этого сделать. большое спасибо – Vins

Смежные вопросы