Создайте NSMutableArray, используя NSCalendar - PullRequest
0 голосов
/ 28 октября 2010

У меня следующая проблема: мне нужно создать NSMutabeArray с каждым днем ​​недели после определенной даты.

Это должно выглядеть так:

  • Четверг, 28 октября 2010 года
  • четверг, 4 октября 2010 года
  • четверг, 11 октября 2010 года
  • ...

Как я могу это сделать?Я думаю, что это как-то связано с NSCalendar, но я не могу найти правильное решение ... Не могли бы вы мне помочь?

Заранее спасибо

FFraenz

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

Это бесконечный ряд; NSMutableArray может содержать только конечную коллекцию.

В любом случае вам нужен только один участник серии, например, 2010-10-28. Чтобы получить четверг после этого, добавьте одну неделю. Чтобы получить третью дату в серии, добавьте неделю ко второй дате или две недели к первой дате. Любой участник серии предоставляет вам доступ к любому другому участнику серии.

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

0 голосов
/ 28 октября 2010

Для фактической даты:

NSDate *today = [[NSDate alloc] init];

Чтобы добавить неделю:

NSDate *nextDate = [today dateByAddingTimeInterval:60*60*24*7];

Затем вы можете повторить и создать свой массив:

NSMutableArray* dates = [[NSMutableArray alloc] init];
NSDate *date= [[NSDate alloc] init];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setWeek:1];

for (int i=0;i<10;i++) {
  NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate:date options:0];
  [dates addObject:date];
  [date release];
  date = nextDate;
}
[date release];
...