2010-02-04 5 views
0

J'essaie d'implémenter une méthode qui incrémentera une variable d'instance NSDate d'un mois. J'ai des problèmes de gestion de la mémoire avec ça. (J'utilise MallocScribble et NSZombieEnabled, et obtenir le message: - [CFDate copy]: message envoyé à l'instance désaffectée 0x3d9dfa0)Comment incrémenter un NSDate

Ma question se résume à: quelle est la meilleure façon d'incrémenter une date? Voici mon code:

NSDate *displayedMonthYear; 
.... 

-(IBAction) nextMonth:(id)sender { 

    NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setMonth:1]; 
    NSDate *prevDate = [displayedMonthYear copy]; 
    [displayedMonthYear release]; 
    displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:prevDate options:0]; 
    [prevDate release]; 
    [dateComponents release]; 
    [calendar release]; 
} 

Au départ, je ne faisais pas le bit avec la copie prevDate, mais faisait quelque chose comme:

displayedMonthYear = [calendar dateByAddingComponents:dateComponents toDate:displayedMonthYear options:0]; 

Cependant, je craignais que cette approche serait une fuite de mémoire. Donc, je suppose que c'est plus un problème de gestion de la mémoire qu'un problème de date, mais toute l'aide serait grande -

+0

Le code dans ce projet: http: //github.com/klazuka/Kal est le meilleur que j'ai vu pour la gestion des dates, des mois, etc. dans Cocoa. –

+0

Je vais vérifier - merci – BridgetG

Répondre

0

Vous devez retain attribuer la valeur .

Il est également inutile d'utiliser copy. Il y a beaucoup de façons de le faire; voici un autre exemple:

NSDate* newDate = [calendar dateByAddingComponents:dateComponents displayedMonthYear options:0]; 
[displayedMonthYear release]; 
displayedMonthYear = [newDate retain]; 
+0

Cela a fonctionné - merci pour l'aide. – BridgetG