Pergunta

Eu tenho o seguinte problema: preciso criar um NSMutABearray a cada dia da semana após uma data específica.

Isso deve parecer:

  • Quinta -feira, 28 de outubro de 2010
  • Quinta -feira, 04 de outubro de 2010
  • Quinta -feira, 11 de outubro de 2010
  • ...

Como eu posso fazer isso? Eu acho que tem algo a ver com o NSCalendar, mas não consigo encontrar a solução certa ... você poderia me ajudar?

Agradeço antecipadamente

Ffraenz

Foi útil?

Solução

Essa é uma série infinita; Um NSMutableArray pode realizar apenas uma coleção finita.

De qualquer forma, você precisa apenas de um único membro da série, como 2010-10-28. Para chegar à quinta -feira depois disso, adicione uma semana. Para obter a terceira data da série, adicione uma semana à segunda data ou duas semanas até a primeira data. Ter qualquer membro da série fornece acesso a qualquer outro membro da série.

Se você está começando a partir de uma data que não é o dia da semana certo, obtenha os componentes da data para essa data, adicione a diferença entre o dia correto da semana e o dia da semana que ele tem no dia do mês e converta os componentes da data alterada de volta para um encontro. Essa data estará no dia da semana desejado na mesma semana.

Outras dicas

Ter data real:

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

Para adicionar uma semana:

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

Então você pode iterar e criar sua matriz:

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];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top