Frage

Ich habe den folgenden Code unter dem gemeint ist eine Klasse var ändern „heute“ genannt vorwärts oder rückwärts von einem Tag. Es wird eine Zeit arbeiten, aber dann nach, dass es abstürzt. Es wird das gleiche tun, egal, ob ich die linke Taste oder rechte Taste drücken. Was mache ich falsch?

die var heute ist eine Klasse var initiiert wie .. heute = [NSDate Datum]

Hier ist die Methode, die Abstürze:

 (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;

}

War es hilfreich?

Lösung

Nicht nur müssen Sie das Datum erstellt behalten, aber Sie müssen auch gehalten den vorhandenen Wert lösen „heute“, sonst werden Sie das alte Referenzleck.

Wenn Sie die Instanz zu initialisieren, verwenden Sie:

today = [[NSDate date] retain];

Ich würde die letzte Zeile ändern:

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

Und schließlich in Ihrer dealloc Methode hinzufügen:

[today release];

vor dem Aufruf von [super dealloc];

Andere Tipps

Sie müssen die Speicherverwaltung Dokumentation lesen. Das ist hier:

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

Wenn Sie das Hinzufügen oder Tage subtrahieren, mögen Sie vielleicht, dies zu lesen, das ist eine alternative Möglichkeit, das gleiche zu tun:

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

Schließlich, wenn etwas abstürzt, ist es oft hilfreich, auf der Rückseite Spuren suchen (und sie in Fragen, wenn Sie es nicht für sich selbst herausfinden können). Speicherverwaltung Fehler sind in der Regel das Problem, wenn Sie objc_msgSend (oder einen seiner Begleiter) in der Spur zu sehen.

Vielleicht müssen Sie sagen,

today = [[NSDate date] retain]

Ich glaube, Sie brauchen das Newday Objekt aus der addTimeInterval-Methode zurück behalten. Sie können sich auch heute freigeben müssen, bevor Sie die Zuordnung am Ende tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top