Pergunta

Eu tenho o seguinte código abaixo que se destina a alterar um var classe chamada "hoje" frente ou para trás por um dia. Ele vai trabalhar uma vez, mas depois disso ele trava. Ele vai fazer a mesma matéria sem se eu pressionar o botão esquerdo ou o botão direito. O que estou fazendo de errado?

o var hoje é um var classe iniciado como .. hoje = [data NSDate]

Aqui está o método que deixe de funcionar:

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

}

Foi útil?

Solução

Não só você precisa para manter a data de criação, mas você também precisa liberar o valor existente detido por "hoje", caso contrário você vai vazar a referência de idade.

Ao inicializar a instância, use:

today = [[NSDate date] retain];

Gostaria de mudar a última linha para:

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

E, finalmente, em seu método dealloc, adicione:

[today release];

antes de chamar [super-dealloc];

Outras dicas

Você precisa ler a documentação de gerenciamento de memória. Isso é aqui:

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

Se você está adicionando ou subtraindo dias, você pode querer ler este que é uma forma alternativa de fazer a mesma coisa:

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

Por fim, se algo falhar, muitas vezes é útil olhar para os vestígios de volta (e incluí-los em suas perguntas se você não pode descobrir por si mesmo). erros de gerenciamento de memória são geralmente o problema se você ver objc_msgSend (ou um de seus companheiros) no rastreio.

Talvez você precisa dizer

today = [[NSDate date] retain]

Eu acho que você precisa para manter o objeto NewDay retornado do método addTimeInterval. Você também pode precisar para liberar hoje antes de fazer a atribuição no final.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top