Hey, ich mache nur eine Beispielanwendung und ich habe ein kleines Problem, also habe ich eine Tabellenansicht und dann habe ich ein paar Zeilen und wenn ein Benutzer eine Zeile klickt, nimmt sie sie zu einem neuen Aussicht. Auf dieser Ansicht habe ich einen Knopf, um Musik zu spielen. Ich verwende einen Timer, um einen Schieberegler basierend auf der Musikdauer und der verbleibenden Zeit zu erhöhen.So stoppen Sie NSTimer
Jetzt ist mein Problem, was muss ich setzen, damit, wenn ich zurück zur Tabellenansicht über den oberen linken Knopf gehe, dass der NSTimer stoppt?
das ist was ich bisher habe, kann ich nicht wiederholen: YES Timer zu stoppen.
#import "SecondViewController.h"
@implementation SecondViewController
@synthesize lbl1;
@synthesize timer;
-(IBAction) slide {
myMusic.currentTime = slider.value;
}
-(IBAction)play
{
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
slider.maximumValue = [myMusic duration];
myMusic.volume = 0.2;
[myMusic prepareToPlay];
[myMusic play];
}
-(IBAction)pause
{
[myMusic pause];
}
-(IBAction)stop
{
slider.value = 0;
myMusic.currentTime = 0;
[myMusic stop];
}
- (void)updateTime{
slider.value = myMusic.currentTime;
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
//This plays music, we must give it a path to find the file and then u can change it.
NSString * pathToMusicFile = [[NSBundle mainBundle] pathForResource:@"Katy" ofType:@"mp3"];
myMusic = [[ AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:pathToMusicFile] error:NULL];
myMusic.delegate = self;
myMusic.numberOfLoops = -1;
slider.value = 0;
//[myMusic play];
[super viewDidLoad];
}
- (void)viewDidUnload {
[timer invalidate];
timer = nil;
//myMusic.currentTime = 0;
[myMusic stop];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
-(IBAction) TxtChange;{
lbl1.text = @" test2! I CHNAGED TEXT FROM ANOTHER XIB";
}
- (void)dealloc {
[timer invalidate];
timer = nil;
[myMusic release];
[super dealloc];
}
@end
Die App stürzt nicht ab, wenn ich einen nicht instanziierten Timer ungültig mache. – IgniteCoders