Question

Je le code suivant ci-dessous qui est destiné à changer une variable de classe appelée « aujourd'hui » d'un jour avant ou en arrière. Il travaillera un temps mais après qu'il se bloque. Il fera la même chose, peu importe si j'appuie sur le bouton gauche ou droite. Qu'est-ce que je fais mal?

Aujourd'hui var est une classe var initié comme aujourd'hui .. = [date NSDate]

Voici la méthode qui tombe en panne:

 (IBAction)changeDateByOne:(id)sender{

NSDate *newDay;
NSDate *currentDay = today;

NSTimeInterval secondsPerDay = 24 * 60 * 60;

if(sender == leftButton){
     newDay = [currentDay addTimeInterval:-secondsPerDay];

}else if(sender == rightButton) { 
     newDay = [currentDay addTimeInterval: secondsPerDay];


}

today = newDay;

}

Était-ce utile?

La solution

Non seulement avez-vous besoin de conserver la date de création, mais vous avez aussi besoin de libérer la valeur existante détenue par « aujourd'hui », sinon vous fuyez l'ancienne référence.

Lors de l'initialisation de l'instance, utilisez:

today = [[NSDate date] retain];

Je changerais la dernière ligne à:

[today release];
today = [newDay retain];

Et enfin, dans votre méthode dealloc, ajouter:

[today release];

avant d'appeler [super dealloc];

Autres conseils

Vous avez besoin de lire la documentation de gestion de la mémoire. C'est ici:

http://developer.apple.com /iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

Si vous ajoutez ou soustraction de jours, vous pouvez lire ce qui est une autre façon de faire la même chose:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1

Enfin, si quelque chose tombe en panne, il est souvent utile de regarder les traces de dos (et les inclure dans vos questions si vous ne pouvez pas comprendre par vous-même). bogues de gestion de la mémoire sont généralement le problème si vous voyez objc_msgSend (ou l'un de ses compagnons) dans la trace.

Peut-être que vous devez dire

today = [[NSDate date] retain]

Je pense que vous devez retenir l'objet Newday retourné par la méthode addTimeInterval. Vous devrez peut-être libérer aujourd'hui avant de faire la cession à la fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top