2010-08-23 7 views
0

J'ai le code suivant dans mon application. C'est une application iPad, avec cinq tables dans une seule vue nommée monTable, tueTable etc. Ces tables représentent du lundi au vendredi.NSDate/NSCalendar Problème

Dans ce code, je reçois la date et place chaque titre de table à la date du lundi au vendredi (cette semaine). Ensuite, si j'appuie sur un bouton, nextWeek devient TRUE et je recharge les données de la table. Cela signifie alors que la semaine est augmentée. Voir?

-(IBAction)nextWeekDown{ 
    nextWeek = TRUE; 
    [monTable reloadData]; 
} 

- (NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(int)section{ 

    curDate = [NSDate date]; // Get current date 
    calendar = [NSCalendar currentCalendar];// Init calendar 
    comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components 

    // Week days change from 1 to 7, Sunday is the 1st, Saturday - the last one. 
    if (tableView == monTable){ 
     if(nextWeek == TRUE){ 
      [comps setHour:168]; 
      NSDate *date = [calendar dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:2]; 
     } 
    } 
    if (tableView == tueTable){ 
     if(nextWeek == TRUE){ 
      [comps setHour:168]; 
      NSDate *date = [calendar dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:3]; 
     } 
    } 
    if (tableView == wedTable){ 
     if(nextWeek == TRUE){ 
      [comps setHour:168]; 
      NSDate *date = [calendar dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:4]; 
     } 
    } 
    if (tableView == thuTable){ 
     if(nextWeek == TRUE){ 
      [comps setHour:168]; 
      NSDate *date = [calendar dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:5]; 
     } 
    } 
    if (tableView == friTable){ 
     if(nextWeek == TRUE){ 
      [comps setHour:168]; 
      NSDate *date = [calendar dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:6]; 
     } 
    } 

    NSDate *tDate = [calendar dateFromComponents:comps]; 
    NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [formatter setDateFormat:@"EEE, MMM d"]; 

    return [formatter stringFromDate:tDate]; 
} 

Mon problème est que, pour une raison ou filaire, il augmente seulement lundi de sept jours à la semaine prochaine et aucun des autres jours sont modifiés lorsque le bouton est pressé des idées? Merci.

Répondre

0

Dans la méthode nextWeekDown, vous ne rechargez que monTable. Naturellement, les autres tables ne sont pas rechargées. Vous avez besoin de recharger toutes les autres tables aussi ...

+0

Vous êtes allé m'a fait paraître stupide maintenant ... :) Je jure de ne jamais poser une question comme celle-ci tard dans la nuit quand je suis à moitié réveillé jamais. Je suppose que c'est aussi une partie de l'apprentissage pour être efficace en relisant mon propre code, j'y arriverai un jour. –

+0

Juste un suivi à cette question. Je l'ai pour que lorsque le bouton est pressé, nextWeek est VRAI, ce qui signifie bien sûr que les tables sont rechargées sept jours à l'avance. Mais pour ma vie, je ne peux pas passer à NextWeek = FALSE et être capable d'appuyer à nouveau sur le bouton. –

+0

Ne vous inquiétez pas réparé! Cependant un autre problème! Quand j'appuie sur le bouton de la semaine prochaine, il continue à traverser les semaines, mais quand il atteint la fin de septembre, il remonte à août. –