2013-02-20 3 views
2

Я строю UITableView, и хотел бы группу в месяц, так что я могу иметь такие строки, как мои заголовки разделов, например:Сортировка NSArray с объектом NSDate в NSDictionary по месяцам

February 2013 
- Item 1 
- Item 2 

January 2013 
- Item 1 
- Item 2 

У меня есть NSArray, который имеет пользовательские объекты, у которых есть свойство pubDate, которое является NSDate.

Как я могу использовать этот объект NSDate для группировки моих пользовательских объектов в NSDictionary по месяцам?

+0

Вы можете отсортировать массив дат довольно просто (если это чисто NSDate объекты) с помощью встроенных в массив сортировки подпрограмм. Затем «пройдите» через массив и обратите внимание, когда начнется новый месяц, добавив соответствующий заголовок месяца. –

+0

Нет, массив заполняется пользовательскими объектами, одним из свойств которого является 'NSDate'. –

+0

Затем он требует описания пути к дате с помощью одного из нескольких методов сортировки массивов. Только незначительно сложнее. –

ответ

7

Сортировка массив, как этот

NSArray *sortedArray = [yourArrayOfCustomObjects sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     NSDate *firstDate = [(YourCustomObject*)obj1 pubDate]; 
     NSDate *secondDate = [(YourCustomObject*)obj2 pubDate]; 
     return [firstDate compare:secondDate];   

    }]; 

// Теперь простая итерация, и вы можете определить, все же записи в месяце.

// Код не является полным для иллюстрации.

// Вам также нужно изменить год смены года.

int curMonth = 0; 
int prevMonth = 0; 
foreach(CustomObject *obj in sortedArray) 
{ 
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:obj.pubDate]; 
    prevMonth = curMonth; 
    curMonth = components.month; 
    if(prevMonth != 0 && curMonth != prevMonth) 
    { 
     //Month Changed 
    } 
} 
1

Посмотрите на NSDateComponents. Если вы преобразуете свои даты на сегодняшний день, компоненты:

[[NSCalendar currentCalendar] components:(NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date] 

тогда у вас будут объекты, которые вы можете легко сравнить для равенства.

0

Я думаю, этот вопрос отсутствует ответ от Ole Бегеманна, однако это ссылка (и я не в состоянии отправить комментарий < репо) Я даю ответ на этот вопрос,

Если кто-то еще ищет какой-то элегантное решение, проверить это,

http://oleb.net/blog/2011/12/tutorial-how-to-sort-and-group-uitableview-by-date/

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